Bien que je sois d'accord avec la réponse d'Ari (et que je l'aie votée :), je devais faire une étape supplémentaire pour le faire fonctionner avec Java sous Windows (où il devait être déployé) :
openssl s_client -showcerts -connect www.example.com:443 < /dev/null | openssl x509 -outform DER > derp.der
Avant d'ajouter le openssl x509 -outform DER
conversion, je recevais une erreur de keytool sous Windows se plaignant du format du certificat. L'importation du fichier .der a bien fonctionné.
Il s'avère qu'il y a plus de complexité ici :j'avais besoin de fournir beaucoup plus de détails pour que cela fonctionne. Je pense que cela a quelque chose à voir avec le fait que c'est une connexion qui nécessite une authentification client, et le hankshake avait besoin de plus d'informations pour continuer jusqu'à l'étape où les certificats ont été vidé.
Voici ma commande de travail :
openssl s_client -connect host:port -key our_private_key.pem -showcerts \
-cert our_server-signed_cert.pem
J'espère que c'est un coup de pouce dans la bonne direction pour tous ceux qui auraient besoin de plus d'informations.
Une ligne pour extraire le certificat d'un serveur distant au format PEM, cette fois en utilisant sed
:
openssl s_client -connect www.google.com:443 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
Avec SNI
Si le serveur distant utilise SNI (c'est-à-dire partage plusieurs hôtes SSL sur une seule adresse IP), vous devrez envoyer le nom d'hôte correct afin d'obtenir le bon certificat.
openssl s_client -showcerts -servername www.example.com -connect www.example.com:443 </dev/null
Sans SNI
Si le serveur distant n'utilise pas SNI, vous pouvez ignorer -servername
paramètre :
openssl s_client -showcerts -connect www.example.com:443 </dev/null
Pour afficher tous les détails du certificat d'un site, vous pouvez également utiliser cette chaîne de commandes :
$ echo | \
openssl s_client -servername www.example.com -connect www.example.com:443 2>/dev/null | \
openssl x509 -text