Comment enregistrer un certificat SSL de serveur distant localement sous forme de fichier

319

J'ai besoin de télécharger un certificat SSL d'un serveur distant (pas HTTPS, mais la négociation SSL doit être identique à Google Chrome / IE / wget et empêcher toutes les erreurs d'échec de la vérification du certificat) et ajouter le certificat de confiance dans mes ordinateurs portables. magasin de certificats, car je ne parviens pas à obtenir de mon informaticien le cert.

c'est pour les communications de bureau donc je ne peux pas vraiment utiliser le client réel pour obtenir le cert.

Comment puis-je faire cela, j'ai Windows 7 et une pile de Linux à portée de main, donc tout outil / langage de script convient.

Kimvais
la source
Pour obtenir le certificat d'un serveur de messagerie , voir security.stackexchange.com/questions/70528/…
That Brésilien
Très probablement, votre navigateur possède une fonctionnalité intégrée pour cela - peut-être sous "Outils de développement".
novembre

Réponses:

316

Si vous avez accès à OpenSSL, essayez

openssl s_client -connect {HOSTNAME}:{PORT} -showcerts

en remplaçant {HOSTNAME} et {PORT} par vos valeurs.

gbroiles
la source
2
Je préfère cette option car je n'ai pas besoin d'ouvrir une interface graphique, et je peux le faire via SSH à partir de nos serveurs.
brampe
2
De plus, cela fonctionne pour des protocoles autres que HTTP.
mat
15
La solution elec3647 automatise entièrement l'extraction du PEM dans un pipeline shell.
phs
4
443 est le port par défaut pour HTTPS.
Flimm
4
J'avais besoin d' -servernameoption pour obtenir le certificat d'hôte virtuel. gist.github.com/Artistan/5219484efb2fe51cd064175b3d0d5971
Artistan
241

Une méthode rapide pour extraire et télécharger le certificat consiste à exécuter la commande suivante, qui dirige la sortie de -showcerts vers la commande x509 ssl, qui supprime simplement tout ce qui est étranger. Par exemple:

openssl s_client -showcerts -connect server.edu:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem

Pour utiliser le certificat, avec wget,

wget https:/server.edu:443/somepage --ca-certificate=mycertfile.pem
elec3647
la source
5
J'ai essayé ceci (sur un autre site Web) - mais on m'attendait à voir toute la chaîne de certs: semble-t-il ne rapporter que le premier dans la chaîne - est-ce à prévoir?
monojohnny
8
Cela ne fonctionne pas pour moi: impossible de charger le certificat 27262: erreur: 0906D06C: routines PEM: PEM_read_bio: aucune ligne de départ: /SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/pem/pem_lib.c: 648: Expecting: TRUSTED CERTIFICAT
Janusz
4
Je suis d'accord avec monojohnny, cela ne vous donne pas la chaîne complète.
Michael Munsey
4
En retard, mais @monojohnny: openssl s_client -showcertsaffiche tous les certificats de la chaîne reçue (si la connexion aboutit), mais la navigation openssl x509passe seulement le premier et rejette le reste. Pour obtenir tous les utiliser à la place ...| sed -n '/^-----BEGIN CERT/,/^-----END CERT/p'ou ...| awk '/^-----BEGIN CERT/,/^-----END CERT/'vous pouvez également utiliser un peu plus compliqué awkà mettre chaque cert dans un fichier séparé qui les rend plus faciles à utiliser avec opensslet d'autres outils.
dave_thompson_085
3
en utilisant wget, il semble ne sauver qu'un index.html=>HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html.1’
OZZIE
126

Pour être honnête, je n'ai jamais essayé cela auparavant (jamais eu besoin de le faire), cependant, je viens d'essayer dans Firefox et cela semble fonctionner pour la sauvegarde:

  1. Cliquez sur l'icône de certificat SSL en haut / Cadenas en bas.
  2. Cliquez sur View Certificate
  3. Cliquez sur l' Detailsonglet
  4. Choisissez le certificat que vous voulez dans la hiérarchie [non encerclé dans l'image]
  5. Cliquez sur Export

texte alternatif

William Hilsum
la source
Bon à savoir - mais par curiosité, pouvez-vous expliquer un peu plus ce que vous essayez d'accomplir? Je n'ai jamais eu besoin d'exporter un certificat client SSL et je suis très curieux de savoir pourquoi vous auriez réellement besoin de le faire ...
William Hilsum
1
C'est un certificat de serveur, pas un certificat client. La principale raison d'exporter une clé privée et un certificat client est de conserver une sauvegarde ou de vous authentifier à l'aide d'un autre navigateur ou d'un autre ordinateur.
Gbroiles
@ gbroiles - lisez la question, il a utilisé la mauvaise terminologie, mais cela a résolu son problème.
William Hilsum
1
oui, et j'ai répondu à votre question - pourquoi quelqu'un voudrait-il enregistrer un certificat client? "Certificat de client SSL" était votre terme, pas le sien.
Gbroiles
1
On dirait qu'il n'y a pas moyen de faire cela dans Chrome, non?!
Fatuhoku
50

Exportation d'un certificat à l'aide du navigateur Chrome

  1. Se connecter au site en utilisant SSL ( https: // peu importe )

2. Cliquez sur le symbole de cadenas puis sur Détails.

  1. Depuis la version 56 de Chrome, procédez comme suit: allez dans le menu Trois points -> Plus d'outils -> Outils de développement, puis cliquez sur l'onglet Sécurité. Cela vous donnera un aperçu de la sécurité avec un bouton Afficher le certificat .

  2. Cliquez sur le bouton Afficher le certificat .

    Une fenêtre modale s'ouvrira. Il a deux vitres. La partie supérieure montre la hiérarchie de confiance du certificat du site (le dernier répertorié), le ou les certificats intermédiaires et le certificat racine (le plus élevé).

    Le deuxième volet, plus grand, affiche les détails de l’un des certificats.

    Il peut y avoir zéro ou plusieurs certificats intermédiaires.

    Notez que le certificat racine a une icône avec une bordure dorée. Les autres ont une bordure bleue.

    Voir la capture d'écran ci-dessous.

  3. Pour exporter un certificat:

    1. Cliquez d'abord sur l'icône du certificat dans la hiérarchie des relations de confiance.
    2. Le certificat sera affiché dans la partie principale du modal.
    3. Cliquez sur la grande icône du certificat dans la partie principale du modal. Faites glisser l'icône sur votre bureau. Chrome copiera ensuite le certificat sur votre bureau.

entrez la description de l'image ici

Larry K
la source
1
J'ai dû faire glisser l'icône sur un éditeur de texte, le bureau ne fonctionnant pas pour moi.
Cory Klein
2
Pour Chrome sous Windows, après avoir cliqué sur "Afficher le certificat", le modal est différent de Mac. Cliquez sur l'onglet Détails, puis sur Copier dans un fichier ... Choisissez ensuite le format et le nom du fichier, ce qui est simple.
PolyTekPatrick
1
Lorsque j'utilise Chrome v63 sur Mac OS, le fichier texte obtenu en faisant glisser le certificat est lisible par l'homme, mais pas dans un format structuré que je puisse comprendre comment convertir en format lisible par une machine telle que X.509 .crt.
Jim DeLaHunt
aucune différence si vous ouvrez la barre d'adresse ou cet onglet de dev, et ne pouvez toujours pas télécharger le
fichier
1
Ne fonctionne plus sous Chrome 72.0.3626.121
A. D'Alfonso
20

C'est la réponse de gbroiles , mais je tenais à souligner que le projet cURL comporte une page avec quelques détails supplémentaires sur l'utilisation opensslde la sauvegarde du certificat SSL du serveur distant:

  • openssl s_client -connect {HOSTNAME}: {PORT} | fichier de départ
  • Tapez QUITet appuyez sur la touche Entrée / Retour.
  • Le certificat sera répertorié entre les marqueurs "BEGIN CERTIFICATE" et "END CERTIFICATE".
  • Si vous voulez voir les données dans le certificat, vous pouvez utiliser:

    openssl x509 -inform PEM -en certfile -text -out certdata

    certfileest le certificat extrait de logfile. Regardez dedans certdata.

Daniel Trebbien
la source
Cela a fonctionné pour moi. Pour être un peu plus explicite, j'ai édité logfile et coupé tout ce qui était en dehors de BEGIN CERTIFICATE et END CERTIFICATE et enregistré le résultat sous le nom certfile.pem (je ne suis pas sûr que l'extension soit nécessaire).
Michael Welch
16

automatique

-servername était nécessaire pour obtenir le bon certificat de l'hôte virtuel sur notre serveur.

openssl s_client -showcerts -connect host.name.com:443 -servername host.name.com </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > host.name.com.pem

vous pouvez également convertir en certificat pour le bureau

openssl x509 -inform PEM -in host.name.com.pem -outform DER -out host.name.com.cer

La dernière partie consiste à l'ajouter à vos certificats, mais vous ne devez pas
utiliser le trousseau windows for mac que j'ai utilisé, il devrait être similaire ...

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain host.name.com.cer

Artistan
la source
Notez que certaines applications rencontrent des problèmes avec les porte-clés System et SystemRoot (Golang, je vous regarde), donc après avoir installé et défini la confiance pour ces niveaux, vous pouvez également le copier sur votre propre utilisateur login.keychainvia l' Keychain Accessapplication, pouvez simplement parcourir le certificat dans System / SystemRoot, cliquer dessus et le faire glisser vers votre logintrousseau.
dragon788
1
@ dragon788 - mon intention était d'automatiser cela avec une ligne de commande et cela fonctionne pour moi. Merci de partager ici si vous trouvez une solution pour login.keychain via CLI également! Merci!
Artistan
à en juger par ce que j'ai lu sur le Web, je pense que le simple fait de l'omettre -dde la commande ne s'appliquera qu'au trousseau de l'utilisateur, au lieu du trousseau Système.
dragon788
Si vous ajoutez également un ou plusieurs certificats intermédiaires, vous souhaiterez les utiliser à la trustAsRootplace de ceux-ci trustRootafin de les ajouter correctement.
dragon788
2

Cela donnera les résultats contenant les certificats uniquement

echo QUIT | \
openssl s_client -showcerts -connect hostname:port | \
awk '/-----BEGIN CERTIFICATE-----/ {p=1}; p; /-----END CERTIFICATE-----/ {p=0}' "
Archimedes Trajano
la source
0

J'ai trouvé un moyen beaucoup plus facile sous Windows. Essayé Microsoft Edge (pré-chrome) et cliqué sur le verrou dans la barre d’adresse -> Afficher le certificat Le dialogue s’ouvre avec un bouton "Exporter vers un fichier" qui l’enregistre sous un fichier .crt.

Pas beaucoup, j'utiliserais Edge pour, mais c'était un morceau de gâteau.

Dale Wilbanks
la source