I když souhlasím s Ariho odpovědí (a hlasoval jsem pro ni :), potřeboval jsem udělat další krok, aby to fungovalo s Javou ve Windows (kde bylo potřeba nasadit):
openssl s_client -showcerts -connect www.example.com:443 < /dev/null | openssl x509 -outform DER > derp.der
Před přidáním openssl x509 -outform DER
převodu, dostával jsem chybu od keytool ve Windows, který si stěžoval na formát certifikátu. Import souboru .der fungoval dobře.
Ukázalo se, že je zde mnohem složitější:Potřeboval jsem poskytnout mnohem více podrobností, abych to mohl spustit. Myslím, že to souvisí se skutečností, že jde o připojení, které vyžaduje ověření klienta, a hankshake potřeboval více informací, aby mohl pokračovat do fáze, kdy byly certifikáty vyhozeny.
Zde je můj pracovní příkaz:
openssl s_client -connect host:port -key our_private_key.pem -showcerts \
-cert our_server-signed_cert.pem
Doufejme, že je to postrčení správným směrem pro každého, kdo by si mohl vystačit s dalšími informacemi.
Jednořádkový text pro extrahování certifikátu ze vzdáleného serveru ve formátu PEM, tentokrát pomocí sed
:
openssl s_client -connect www.google.com:443 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
Se SNI
Pokud vzdálený server používá SNI (to znamená sdílení více hostitelů SSL na jedné IP adrese), budete muset odeslat správný název hostitele, abyste získali správný certifikát.
openssl s_client -showcerts -servername www.example.com -connect www.example.com:443 </dev/null
Bez SNI
Pokud vzdálený server nepoužívá SNI, můžete -servername
přeskočit parametr:
openssl s_client -showcerts -connect www.example.com:443 </dev/null
Chcete-li zobrazit všechny podrobnosti o certifikátu webu, můžete také použít tento řetězec příkazů:
$ echo | \
openssl s_client -servername www.example.com -connect www.example.com:443 2>/dev/null | \
openssl x509 -text