Chcę pobrać certyfikat ssl z, powiedzmy https://www.google.com , używając wget lub innych poleceń. Jakaś linia poleceń unix? wget czy openssl?
Chcę pobrać certyfikat ssl z, powiedzmy https://www.google.com , używając wget lub innych poleceń. Jakaś linia poleceń unix? wget czy openssl?
Odpowiedzi:
Aby pobrać certyfikat, musisz użyć klienta wbudowanego w openssl w następujący sposób:
echo -n | openssl s_client -connect HOST:PORTNUMBER \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert
To zapisze certyfikat /tmp/$SERVERNAME.cert
.
Możesz użyć, -showcerts
jeśli chcesz pobrać wszystkie certyfikaty w łańcuchu. Ale jeśli chcesz tylko pobrać certyfikat serwera, nie musisz tego określać-showcerts
echo -n
daje odpowiedź do serwera, aby połączenie zostało zwolnione
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
usuwa informacje o łańcuchu certyfikatów i szczegółach połączenia. Jest to preferowany format importowania certyfikatu do innych magazynów kluczy.
-showcerts
pokazuje również serwer / certyfikat certyfikatu? Myślałem, że wyświetla półprodukty tylko wtedy, gdy włączono ten przełącznik.
s_client
zawsze pokazuje certyfikat serwera (jeśli taki istnieje, tzn. Serwer odpowiada cześć i nie wybiera anonimowego pakietu). -showcerts
pokazuje wszystkie otrzymane certyfikaty, najpierw certyfikat serwera, a następnie półprodukty i / lub root.
Znalazłem odpowiedź Openssl zapewnia to.
openssl s_client -connect $ {REMHOST}: $ {REMPORT}
openssl x509 -text <<EOF cert-text EOF
aby zobaczyć szczegóły certyfikatu
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pem
dzięki uprzejmości serverfault.com/questions/139728/…
Gnutls narzędzie klienta, gnutls-cli
można również zrobić to proste:
gnutls-cli --print-cert www.example.com \
< /dev/null \
> www.example.com.certs
Program został zaprojektowany w celu zapewnienia interaktywnego klienta w witrynie, więc musisz podać mu puste dane wejściowe (w tym przykładzie od /dev/null
), aby zakończyć sesję interaktywną.
w oparciu o odpowiedź @bignose, oto samodzielna wersja, która dobrze pasuje np. do przepisu szefa kuchni:
sudo apt-get install gnutls-bin
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
sudo update-ca-certificates
true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
ten tryb openssl oczekuje stdin, więc zapewniamy go przez true |
, to łączy się z serwerem określonym w parametrze -connect. 2>/dev/null
wycisza błędy (opcjonalnie), możemy przekazać całe wyjście do parsera x509, określając /dev/stdin
użycie potoku powłoki jako pliku wejściowego. I że wyjście będzie tylko -----BEGIN CERTIFICATE-----
do -----END CERTIFICATE-----
części s_client
produkcji. Możesz przekierować to do pliku, dodając > google.com.pem
na końcu polecenia.
Jak najlepiej mogę powiedzieć, nie weryfikuje to łańcucha certyfikatów, może jedynie powiedzieć, jaką tożsamość ssl zapewnia serwer końcowy.
x509
domyślnie czyta stdin, więc -in /dev/stdin
jest redundantne (3) s_client
sprawdza, czy certyfikat serwera poprawnie łączy się z lokalną kotwicą zaufania (root) i jest nieaktualny, ale masz ukrył informacje, które by to pokazały (4), NIE sprawdza pod kątem odwołania (5) sprawdza nazwę w certyfikacie serwera tylko w wersji 1.0.2, a następnie domyślnie (ale można to łatwo sprawdzić, patrząc na certyfikat później)