J'essaie d'obtenir le certificat d'un serveur distant, que je peux ensuite utiliser pour ajouter à mon magasin de clés et utiliser dans mon application java.
Un développeur senior (qui est en vacances :() m'a informé que je pouvais exécuter ceci:
openssl s_client -connect host.host:9999
Pour obtenir un certificat brut, que je peux ensuite copier et exporter. Je reçois la sortie suivante:
depth=1 /C=NZ/ST=Test State or Province/O=Organization Name/OU=Organizational Unit Name/CN=Test CA
verify error:num=19:self signed certificate in certificate chain
verify return:0
23177:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1086:SSL alert number 40
23177:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:
J'ai aussi essayé avec cette option
-showcerts
et celui-ci (fonctionnant sur Debian, l'esprit vous)
-CApath /etc/ssl/certs/
Mais obtenez la même erreur.
Cette source dit que je peux utiliser cet indicateur CApath mais cela ne semble pas aider. J'ai essayé plusieurs chemins en vain.
Veuillez me faire savoir où je me trompe.
la source
echo "" | openssl s_client -connect server:port -prexit 2>/dev/null | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p'
stackoverflow.com/a/12918442/843000echo | openssl s_client -connect server:port 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cert.pem
sed
paropenssl x509
et le lire en utilisant un sous-shell:openssl x509 -in <(openssl s_client -connect server:port -prexit 2>/dev/null)
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
Bien que je sois d'accord avec la réponse d'Ari (et l'a votée :), j'ai dû faire une étape supplémentaire pour le faire fonctionner avec Java sur Windows (où il devait être déployé):
Avant d'ajouter la
openssl x509 -outform DER
conversion, je recevais une erreur de keytool sur Windows se plaignant du format du certificat. L'importation du fichier .der a bien fonctionné.la source
Il s'avère qu'il y a plus de complexité ici: j'avais besoin de fournir beaucoup plus de détails pour lancer ce processus. Je pense que c'est quelque chose à voir avec le fait que c'est une connexion qui a besoin d'une authentification client, et le hankshake avait besoin de plus d'informations pour continuer à l'étape où les certificats ont été vidés.
Voici ma commande de travail:
J'espère que c'est un coup de pouce dans la bonne direction pour quiconque pourrait faire plus d'informations.
la source
Un one-liner pour extraire le certificat d'un serveur distant au format PEM, cette fois en utilisant
sed
:la source
-servername
option, je ne sais pas pourquoi, mais j'ai dû l'utiliser pour obtenir le certificat complet.La ligne de commande la plus simple pour cela, qui comprend la sortie PEM pour l'ajouter au magasin de clés, ainsi qu'une sortie lisible par l'homme et prend également en charge SNI, ce qui est important si vous travaillez avec un serveur HTTP est:
L' option -servername permet d'activer la prise en charge SNI et le texte openssl x509 imprime le certificat au format lisible par l'homme.
la source
Pour obtenir le certificat du serveur distant, vous pouvez utiliser l'
openssl
outil et vous pouvez le trouver entreBEGIN CERTIFICATE
etEND CERTIFICATE
que vous devez copier et coller dans votre fichier de certificat (CRT).Voici la commande qui le démontre:
Pour retourner tous les certificats de la chaîne, ajoutez simplement
g
(global) comme:Ensuite, vous pouvez simplement importer votre fichier de certificat (
file.crt
) dans votre trousseau et le rendre fiable, donc Java ne devrait pas se plaindre.Sous OS X, vous pouvez double-cliquer sur le fichier ou faire glisser et déposer votre accès au trousseau, il apparaîtra donc dans la connexion / Certificats. Double-cliquez ensuite sur le certificat importé et faites-lui toujours confiance pour SSL .
Sur CentOS 5, vous pouvez les ajouter dans un
/etc/pki/tls/certs/ca-bundle.crt
fichier (et exécutersudo update-ca-trust force-enable
:), ou dans CentOS 6 les copier/etc/pki/ca-trust/source/anchors/
et les exécutersudo update-ca-trust extract
.Dans Ubuntu, copiez-les
/usr/local/share/ca-certificates
et exécutezsudo update-ca-certificates
.la source
la source
pour imprimer uniquement la chaîne de certificats et non le certificat du serveur:
pour mettre à jour la confiance CA sur CentOS / RHEL 6/7:
sur CentOS / RHEL 5:
la source
Vous pouvez obtenir et stocker le certificat racine du serveur à l'aide du script bash suivant:
Remplacez simplement les variables requises.
la source
Si votre serveur est un serveur de messagerie (MS Exchange ou Zimbra), vous devrez peut-être ajouter les drapeaux
starttls
etsmtp
:openssl s_client -starttls smtp -connect HOST_EMAIL:SECURE_PORT 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > CERTIFICATE_NAME.pem
Où,
HOST_EMAIL est le domaine du serveur, par exemple, mail-server.com.
SECURE_PORT est le port de communication, par exemple, 587 ou 465
Nom de fichier de la sortie CERTIFICATE_NAME (format BASE 64 / PEM)
la source
Pour le bénéfice d'autres comme moi qui ont essayé de suivre les bons conseils ici lors de l'accès à AWS CloudFront mais qui ont échoué, l'astuce consiste à ajouter
-servername domain.name..
.Source: https://serverfault.com/a/780450/8972
la source