OpenSSL extraire un certificat

De knowledge
Aller à la navigation Aller à la recherche

On voudrait connaitre le certificat d'un serveur en production quelque part mais nous n'y avons pas accès autrement que comme n'importe quel client.

Cela marche pour n'importe quelle connexion tls (ssl) que ce soit un simple serveur web ou un serveur MQTTs ftps etc...

Pour explorer le certificat en place sur le présent wiki:

openssl s_client -servername knowledge.pinon-hebert.fr -connect knowledge.pinon-hebert.fr:443 2> /dev/nul

Nous donne beaucoup de choses dont : La chaine de certification:

---
Certificate chain
 0 s:/CN=knowledge.pinon-hebert.fr
   i:/C=US/O=Let's Encrypt/CN=R3
 1 s:/C=US/O=Let's Encrypt/CN=R3
   i:/C=US/O=Internet Security Research Group/CN=ISRG Root X1
 2 s:/C=US/O=Internet Security Research Group/CN=ISRG Root X1
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---

Oui je suis radin j'utilise let's encrypt. Le certificat lui même:

-----BEGIN CERTIFICATE-----
MIIE/zCCA+egAwIBAgISBDQpc+0xb1u31bGiAHV2kTeAMA0GCSqGSIb3DQEBCwUA
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
EwJSMzAeFw0yMzEwMDYxMzU4MThaFw0yNDAxMDQxMzU4MTdaMCQxIjAgBgNVBAMT
GWtub3dsZWRnZS5waW5vbi1oZWJlcnQuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQDHWr5U7mcSQY+RhcxKLZhzt/AMo3xtvEvJPhfZnjgDLNEEg1Hm
JCXWdeG5l94H2LIbczYE5YodZKqk6ygb0Wta6daOtD0yhqx9790HnBMv242saKfv
v5NTTaQX5LKzJblwmukr4lpzMdNncQwXtk+rgY38YFS2wdKTNQw8nq9GDH24iFlB
KzhS3V/2YD4nsTK783kxR6VHWx/hBXPlQiLDkXyi7IxwzfcIjYNbko5omsq41d6j
BHbH2xDx4AlNk09tBTIkCQTnflVWVbor8BbDOZc1Y1m1hUQ6aZbhYz+iMfk6F0ck
wy4wfcPVlpBI5vX6Id98DH8G2xEmwBQkQCt7AgMBAAGjggIbMIICFzAOBgNVHQ8B
Af8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB
/wQCMAAwHQYDVR0OBBYEFMYN8/BW/lA7SKDKCna47ntiBgDgMB8GA1UdIwQYMBaA
FBQusxe3WFbLrlAJQOYfr52LFMLGMFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcw
AYYVaHR0cDovL3IzLm8ubGVuY3Iub3JnMCIGCCsGAQUFBzAChhZodHRwOi8vcjMu
aS5sZW5jci5vcmcvMCQGA1UdEQQdMBuCGWtub3dsZWRnZS5waW5vbi1oZWJlcnQu
ZnIwEwYDVR0gBAwwCjAIBgZngQwBAgEwggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAA
dgA7U3d1Pi25gE6LMFsG/kA7Z9hPw/THvQANLXJv4frUFwAAAYsFfxxCAAAEAwBH
MEUCIQCggjLkLR+7zHUCZsXfsxuOHNfX49h29yRjaQ/LQAb4KgIgHxu2qMLvWenp
EmvGQd5x0KDrXuLkq+afOFjfnmkoMz4AdgDuzdBk1dsazsVct520zROiModGfLzs
3sNRSFlGcR+1mwAAAYsFfxx4AAAEAwBHMEUCICelplLG6uWfj5LXjCjf+boGrieh
A4d6vPYJgg2awJkDAiEA1Wu5pO/YPqxzsLvK1iIcZi2k4JIchIB8SeXyhtuXBqww
DQYJKoZIhvcNAQELBQADggEBACASzcuPrgDSd2g1LCWdMlojreg+wI8JfzhHQ5z1
28HQEY4hIJ1eetPH5m71QHVwLwys7oiRA4mNp+G2TE95z+rLht2CTtjofj1RJq9S
nXy+dCu/XrYcS9wtdCCAOVkf37WqKVeo8hEH0jAbT/u/yPCjKgsryosfPoq0+TCW
gUwgpZbt145P8/OZzHQoKEumGr3bUzEiUprrfetWv4Hxl7ucsGkV6dLrV69emzeN
CjvEV2QS1MrUUlUdGoyOqkeCFyQdGOxTmy7JlLzsMmdxtxDDJLYD3nsNa/D7dVtD
Q5L3pbZLd+pOuawncFzvUXiyDX7YSankyvSDK+scezFfM58=
-----END CERTIFICATE-----

Pour décoder ce certificat on utilise toujours openssl. Supposons que le certificat soit dans un fichier:

cat cert.der | openssl x509 -text

Qui, entre autre nous donne les infos de validité:

        Issuer: C=US, O=Let's Encrypt, CN=R3
        Validity
            Not Before: Oct  6 13:58:18 2023 GMT
            Not After : Jan  4 13:58:17 2024 GMT
        Subject: CN=knowledge.pinon-hebert.fr

On peut même tout inclure dans la même ligne :

echo | openssl s_client -servername knowledge.pinon-hebert.fr -connect knowledge.pinon-hebert.fr:443 2>/dev/null | openssl x509 -text

Qui nous donne le résultat en une seule ligne et sans fichier temporaire local.

Et ca marche pas qu'en https mais tout ce qui est en ssl/tls.

MQTT

echo | openssl s_client -servername test.mosquitto.org -connect test.mosquitto.org:8883 2> /dev/null | openssl x509 -text

Nous donne le certificat du broker mosquitto de test.

        .....
        Issuer: C=GB, ST=United Kingdom, L=Derby, O=Mosquitto, OU=CA, CN=mosquitto.org/emailAddress=roger@atchoo.org
        Validity
            Not Before: Jun  9 11:21:56 2020 GMT
            Not After : Jun  6 11:21:56 2030 GMT
        Subject: C=GB, ST=United Kingdom, L=Derby, O=Mosquitto, OU=Public server, CN=test.mosquitto.org
        .....

Ils font des certificats autosignés qui durent 10 ans.

ET cette methode est valide pour tous les services sécurisés SSL/TLS.

Même pour du ssh on a une réponse :

openssl s_client -servername localhost -connect localhost:22

Marche très bien et nous dit que c'est bien du SSL sans certificat.

---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 307 bytes
---
New, (NONE), Cipher is (NONE)