446 votes

Affichage des détails d'un certificat SSL distant à l'aide des outils CLI

Dans Chrome, un clic sur l'icône verte du verrou HTTPS ouvre une fenêtre contenant les détails du certificat :

enter image description here

Lorsque j'ai essayé la même chose avec cURL, je n'ai obtenu qu'une partie des informations :

$ curl -vvI https://gnupg.org
* Rebuilt URL to: https://gnupg.org/
* Hostname was NOT found in DNS cache
*   Trying 217.69.76.60...
* Connected to gnupg.org (217.69.76.60) port 443 (#0)
* TLS 1.2 connection using TLS_DHE_RSA_WITH_AES_128_CBC_SHA
* Server certificate: gnupg.org
* Server certificate: Gandi Standard SSL CA
* Server certificate: UTN-USERFirst-Hardware
> HEAD / HTTP/1.1
> User-Agent: curl/7.37.1
> Host: gnupg.org
> Accept: */*

Savez-vous comment obtenir les informations complètes du certificat à partir d'un outil en ligne de commande (cURL ou autre) ?

1 votes

3 votes

Cela dépend probablement aussi de la version. Ma version actuelle curl avec drapeau --verbose montre le contenu complet du certificat du serveur.

584voto

Pedro Perez Points 5352

Vous devriez être en mesure d'utiliser OpenSSL pour vos besoins :

echo | openssl s_client -showcerts -servername gnupg.org -connect gnupg.org:443 2>/dev/null | openssl x509 -inform pem -noout -text

Cette commande se connecte au site Web souhaité et transmet le certificat au format PEM à une autre commande openssl qui lit et analyse les détails.

(Notez que "redondant" -servername est nécessaire pour rendre openssl faire une demande auprès du support SNI).

0 votes

Il semble y avoir une erreur avec cette commande : OpenSSL> openssl:Error: 'CONNECTED(00000003)' is an invalid command.

0 votes

Salut Adam, ça marche sur mon Ubuntu et ça devrait marcher sur n'importe quel Linux. D'après l'erreur que tu as postée, je dirais que tu as peut-être mal saisi l'hôte ou le port ? gnupg.org:443 fonctionne pour moi aussi. Qu'obtenez-vous si vous exécutez simplement : echo | openssl s_client -showcerts -connect gnupg.org:443 2>/dev/null

2 votes

@AdamMatan Avez-vous inclus la commande complète après le deuxième tuyau ? Le message d'erreur semble indiquer que la deuxième invocation d'openssl s'est exécutée en mode interactif (c.-à-d. openssl vs openssl x509 -inform pem -noout -text ). Ce que Pedro a écrit fonctionne bien pour moi.

185voto

Antonio Costa Points 1587

Informations de base sur le certificat

C'est mon script quotidien :

curl --insecure -vvI https://www.example.com 2>&1 | awk 'BEGIN { cert=0 } /^\* SSL connection/ { cert=1 } /^\*/ { if (cert) print }'

Sortie :

* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: C=US; ST=California; L=Los Angeles; O=Verizon Digital Media Services, Inc.; CN=www.example.org
*  start date: Dec 10 00:00:00 2021 GMT
*  expire date: Dec  9 23:59:59 2022 GMT
*  issuer: C=US; O=DigiCert Inc; CN=DigiCert TLS RSA SHA256 2020 CA1
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x5588e1f5ae30)
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
* Connection #0 to host www.example.com left intact

Informations complètes sur le certificat

openssl s_client -connect www.example.com:443 </dev/null 2>/dev/null | openssl x509 -inform pem -text

9 votes

Ça ne marche pas pour moi, ça n'inclut pas les dates de début et d'expiration.

13 votes

Depuis un changement récent dans curl (quelque part entre 49 et 52), cela n'affiche rien du tout sur le certificat :(.

1 votes

Supprimer le 2>&1

98voto

Jose Quinteiro Points 814
nmap -p 443 --script ssl-cert gnupg.org

El -p 443 spécifie de ne scanner que le port 443. Si cette option est omise, tous les ports seront analysés et les détails du certificat de tout service SSL trouvé seront affichés. L'adresse --script ssl-cert indique à la Moteur de script Nmap pour exécuter uniquement le ssl-cert script. D'après la documentation, ce script "(r)echerche le certificat SSL d'un serveur. La quantité d'informations imprimées sur le certificat dépend du niveau de verbosité."

Exemple de sortie :

Starting Nmap 7.40 ( https://nmap.org ) at 2017-11-01 13:35 PDT
Nmap scan report for gnupg.org (217.69.76.60)
Host is up (0.16s latency).
Other addresses for gnupg.org (not scanned): (null)
rDNS record for 217.69.76.60: www.gnupg.org
PORT    STATE SERVICE
443/tcp open  https
| ssl-cert: Subject: commonName=gnupg.org
| Subject Alternative Name: DNS:gnupg.org, DNS:www.gnupg.org
| Issuer: commonName=Gandi Standard SSL CA 2/organizationName=Gandi/stateOrProvinceName=Paris/countryName=FR
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2015-12-21T00:00:00
| Not valid after:  2018-03-19T23:59:59
| MD5:   c3a7 e0ed 388f 87cb ec7f fd3e 71f2 1c3e
|_SHA-1: 5196 ecf5 7aed 139f a511 735b bfb5 7534 df63 41ba

Nmap done: 1 IP address (1 host up) scanned in 2.31 seconds

2 votes

Si vous avez besoin de voir les empreintes digitales du certificat, cette commande est bien meilleure que la commande curl -v suggestions dans d'autres réponses.

2 votes

C'est la seule dans ce fil de discussion qui montre les noms alternatifs du sujet pour le certificat.

1 votes

De toutes les autres solutions (pourquoi cette opération de base est-elle si difficile ?), celle-ci est la moins lourde. C'est probablement celle que Trinity préférera aussi.

45voto

faker Points 17246

Ça dépend du type d'information que vous voulez, mais.. :

openssl s_client -showcerts -connect gnupg.org:443

devrait vous donner la plupart des informations, bien qu'elles ne soient pas aussi lisibles par l'homme que celles présentées par Chrome.

3 votes

Malheureusement, très peu de données du certificat sont présentées dans un format lisible par l'homme par cette commande.

13 votes

Je ne suis pas d'accord avec le commentaire précédent, cette commande me dit ce que je dois savoir et est très utile. +1 pour la réponse.

0 votes

Si vous voulez spécifiquement tester pour TLS 1.2 vous pouvez ajouter -tls1_2

35voto

dave_thompson_085 Points 2952

Pour être complet : si vous avez installé sur votre système Java 7 ou supérieur

 keytool -printcert -sslserver $host[:$port]

montre le chaîne (tel que servi) avec presque tous les détails dans un format plutôt laid.

Que vous devrait si Java est installé sur votre système, je ne réponds pas.

2 votes

Brillant, sortie par défaut beaucoup plus utile que openssl (qui nécessite un décodage).

0 votes

Cela semble être la façon la plus simple de vérifier tous les domaines supportés par ssl-cert `keytool -printcert -sslserver smth.yourdomain.com | grep -E 'Owner|DNSName' ceci montrera le "nom de domaine par défaut" du cert et les noms de domaine alternatifs du cert.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X