Les certificats X509

Openssl est le cœur du chiffrement utilisé avec SSL/TLS dans les logiciels libres et pas seulement.

Commençons par regarder la structure d'un certificat X509, puis nous en construirons avec openSSL et finirons en utilisant les services de Let's encrypt pour réaliser un certificat utilisable aussi bien pour assurer du https public que pour sécuriser un système de messagerie.

Structure

Un certificat X.509 contient plusieurs éléments essentiels :

Un exercice pratique intéressant pour ne pas dire primordial, consiste à décortiquer le contenu d'un certificat X509 fourni par un site web https, pourquoi pas celui-ci: Le cadenas (avec Firefox. D'autres grigris peuvent apparaître suivant le navigateur) indique que la connexion est sécurisée et un clic sur ce cadenas, après quelques étapes, permet d’observer le détail du certificat x509. Voici des extraits de son contenu:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            40:40:17:57:0c:8d:62:ee:ad:e6:63:15:28:03:59:4d
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = FR, O = DHIMYOTIS, OU = 0002 48146308100036, organizationIdentifier = NTRFR-48146308100036, CN = Certigna Services CA
        Validity
            Not Before: Nov 19 23:00:00 2024 GMT
            Not After : Nov 19 22:59:59 2025 GMT
        Subject: C = FR, L = PARIS, O = DIRECTION DES SERVICES ADMINISTRATIFS ET FINANCIERS, CN = info.gouv.fr, serialNumber = S328360770
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:b1:ac:14:ed:8f:8c:64:dc:14:84:0d:97:db:56:
                    ba:77:14:3a:bd:67:4f:05:27:72:a8:a3:5f:e8:59:
                    eb:b2:0b:dc:ad:15:3e:6d:19:60:24:98:bc:ef:8d:
                    46:b1:73:88:b9:00:4b:56:72:09:f7:81:71:0f:5b:
                    89:90:b9:83:c0:23:72:35:71:d2:79:d4:8d:fb:1b:
                    db:b1:17:3d:14:25:1d:83:a6:23:79:da:13:80:4f:
                    a9:b3:4b:7a:49:86:c4:eb:4c:c7:f3:5e:a1:01:e9:
                    4d:b3:be:54:7e:98:50:d0:b3:74:4a:c4:75:bb:a2:
                    3f:b8:06:1c:68:05:ac:dd:8d:ff:f4:6a:69:38:92:
                    62:e8:85:61:c3:08:e2:fd:e5:49:b1:df:ba:a4:eb:
                    6d:11:8b:ef:08:29:66:26:91:79:ce:44:c3:4c:9c:
                    47:d3:23:20:98:9a:f3:43:1a:d1:28:d3:02:9d:a1:
                    b2:f8:09:86:06:c4:93:62:74:7d:0a:01:db:3f:37:
                    5c:59:e9:77:24:5c:9a:7e:bc:23:34:91:d5:b0:34:
                    00:4b:55:bb:89:75:36:9d:0c:71:07:b1:73:c6:f5:
                    21:3c:0a:5a:8d:46:17:1a:98:6c:1f:bd:6c:87:c6:
                    cd:07:5a:0c:cf:ca:c9:20:5e:3a:7f:86:5b:36:1c:
                    ec:e5
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            Authority Information Access: 
                CA Issuers - URI:http://autorite.dhimyotis.com/servicesca.der
                CA Issuers - URI:http://autorite.certigna.fr/servicesca.der
                OCSP - URI:http://servicesca.ocsp.certigna.fr
                OCSP - URI:http://servicesca.ocsp.dhimyotis.com
            X509v3 Authority Key Identifier: 
                AC:EC:86:8F:4B:37:1C:B8:7F:17:1B:19:D0:AE:E8:4E:E3:34:5C:12
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Certificate Policies: 
                Policy: 2.23.140.1.2.2
                Policy: 1.2.250.1.177.2.5.1.1.1
                  CPS: https://www.certigna.com/autorite-certification
            X509v3 CRL Distribution Points: 
                Full Name:
                  URI:http://crl.dhimyotis.com/servicesca.crl
                Full Name:
                  URI:http://crl.certigna.fr/servicesca.crl
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Subject Alternative Name: 
                DNS:www.info.gouv.fr, DNS:info.gouv.fr, DNS:recherche.info.gouv.fr, DNS:barometre.info.gouv.fr
            X509v3 Subject Key Identifier: 
                24:19:9E:A8:35:F0:12:9F:82:42:C7:4F:F0:DE:B0:CD:B7:F4:9F:DD
            CT Precertificate SCTs: 
                Signed Certificate Timestamp:
                    Version   : v1 (0x0)
                    Log ID    : 0D:E1:F2:30:2B:D3:0D:C1:40:62:12:09:EA:55:2E:FC:
                                47:74:7C:B1:D7:E9:30:EF:0E:42:1E:B4:7E:4E:AA:34
                    Timestamp : Nov 20 14:40:13.804 2024 GMT
                    Extensions: none
                    Signature : ecdsa-with-SHA256
                                30:45:02:20:75:81:E1:C8:F0:4D:AE:B6:E4:58:F9:5E:
                                4A:51:24:62:11:0F:36:14:C3:9F:99:3F:18:5E:64:C2:
                                2E:A6:C1:F3:02:21:00:83:01:08:89:93:52:68:0F:96:
                                FA:EF:C3:ED:B1:62:D9:DE:3C:0C:11:76:5E:06:B5:81:
                                03:F7:42:79:82:67:3E
                Signed Certificate Timestamp:
                    Version   : v1 (0x0)
                    Log ID    : DD:DC:CA:34:95:D7:E1:16:05:E7:95:32:FA:C7:9F:F8:
                                3D:1C:50:DF:DB:00:3A:14:12:76:0A:2C:AC:BB:C8:2A
                    Timestamp : Nov 20 14:40:13.308 2024 GMT
                    Extensions: none
                    Signature : ecdsa-with-SHA256
                                30:44:02:20:45:E1:58:DF:EF:32:41:4B:DA:38:AA:26:
                                F6:82:39:2C:CA:7F:1B:73:9B:2A:77:B2:4D:AC:E6:47:
                                78:58:E5:F5:02:20:0A:8B:C1:60:3E:E5:F7:63:39:B8:
                                EA:CB:3F:71:8F:FF:E3:9A:C4:C6:4B:81:D6:6A:4C:83:
                                D9:82:62:96:20:F5
                Signed Certificate Timestamp:
                    Version   : v1 (0x0)
                    Log ID    : E6:D2:31:63:40:77:8C:C1:10:41:06:D7:71:B9:CE:C1:
                                D2:40:F6:96:84:86:FB:BA:87:32:1D:FD:1E:37:8E:50
                    Timestamp : Nov 20 14:40:13.803 2024 GMT
                    Extensions: none
                    Signature : ecdsa-with-SHA256
                                30:46:02:21:00:B2:B3:8D:04:61:9C:DF:9D:72:E3:01:
                                58:ED:84:89:45:CA:0A:52:0A:36:F1:89:56:6E:45:3E:
                                41:D7:D3:B2:64:02:21:00:C5:B6:69:52:E6:9E:04:B7:
                                25:72:C6:42:5A:77:6B:30:0F:EB:D5:E0:45:0D:00:5B:
                                6A:B7:C1:78:CD:32:5E:9B
                Signed Certificate Timestamp:
                    Version   : v1 (0x0)
                    Log ID    : AF:18:1A:28:D6:8C:A3:E0:A9:8A:4C:9C:67:AB:09:F8:
                                BB:BC:22:BA:AE:BC:B1:38:A3:A1:9D:D3:F9:B6:03:0D
                    Timestamp : Nov 20 14:40:13.419 2024 GMT
                    Extensions: none
                    Signature : ecdsa-with-SHA256
                                30:45:02:20:64:C6:D3:84:1E:5B:9B:44:49:F9:05:0D:
                                CB:19:37:D0:CF:BC:3D:D1:49:08:D4:31:8B:00:67:7B:
                                72:78:19:2B:02:21:00:A3:A1:59:64:75:2B:4E:EB:9C:
                                3B:13:92:ED:2A:16:49:14:D6:32:78:35:25:E3:54:BD:
                                B3:50:B8:91:74:B3:63
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        61:a1:4f:c3:a7:f2:16:0d:12:2a:c2:67:55:f7:e6:aa:72:5e:
        7d:6b:b1:dd:48:55:d8:33:4f:d4:b9:6f:2f:2f:87:80:1c:e5:
        34:aa:1a:0f:1f:67:77:ca:6f:eb:e4:14:81:14:d8:fd:24:1d:
        ef:bd:6f:b9:7c:fe:20:5e:66:05:ab:b4:9b:4b:d7:87:40:58:
        ed:a5:8f:d9:59:f0:3e:22:f6:de:93:a5:1a:82:61:76:16:63:
        9c:e1:dc:f4:04:53:2d:b1:e6:b1:e4:2e:7e:01:3b:d1:bd:09:
        b7:5c:4f:9a:13:d8:f4:44:b1:af:fb:ef:31:6b:71:8f:a1:81:
        5f:19:fa:99:b4:4a:c5:64:30:58:ae:bc:29:88:05:ae:a2:18:
        8a:5e:6a:46:9c:cf:35:13:1e:c8:94:9b:53:b0:2f:da:49:b4:
        32:6f:30:6c:6a:a1:46:07:3f:3f:fa:eb:8e:4b:09:e3:c6:b0:
        bd:e2:96:91:e3:68:d3:47:41:9b:68:c8:3d:e9:82:eb:d7:9a:
        ad:75:d7:b9:ac:79:e8:c9:d6:62:76:ae:7c:ee:47:ae:95:88:
        72:9a:fe:2c:b2:46:f5:de:ed:fb:72:f2:ab:15:f4:47:de:12:
        16:ce:20:34:16:3b:2a:36:72:eb:a6:3c:49:db:2a:b6:fa:aa:
        bc:c8:38:ae:34:40:3e:b3:0d:a1:05:32:82:37:16:9c:3f:9b:
        08:14:82:2a:e4:df:e0:db:9f:1e:50:61:a7:65:4f:cb:af:f6:
        a4:4c:cc:d1:27:7e:08:a9:55:44:5f:78:78:5e:8d:4c:40:43:
        49:6c:40:0d:b5:ea:f1:b8:b3:5e:62:94:86:8c:4b:29:fc:f4:
        9a:29:6b:72:da:e0:64:0f:e7:57:5d:66:b2:45:24:6e:69:92:
        93:34:7d:ad:d0:54:b2:02:f1:2a:65:df:93:f8:f0:3b:04:3b:
        fb:4b:17:0c:8f:4d:ab:39:2b:69:be:fa:b8:26:0c:a2:d9:c4:
        64:92:6c:b9:d8:f5:55:60:35:b8:4a:84:f0:4e:bc:91:ae:ae:
        cd:62:12:c2:d4:11:cc:0d:cb:38:15:52:2b:5c:15:92:49:0e:
        d1:2d:2e:3c:55:94:9e:a7:29:62:b5:5b:6e:de:69:67:d7:3f:
        8d:ae:56:ca:87:d2:da:30:57:0b:b4:e6:13:32:20:68:9a:10:
        5f:5a:2d:ca:c8:25:95:2a:cd:d6:f7:2b:ab:18:16:25:b2:0e:
        ba:e8:39:1e:58:17:5c:99:bb:04:0a:0b:20:19:d0:5d:b0:e9:
        1f:01:59:5a:92:4d:ff:5a:ce:70:65:a1:c9:fe:b2:30:da:77:
        83:47:a9:65:7e:ac:4b:71
Plutôt rébarbatif, mais les plus courageux retrouveront les principales informations, aussi bien concernant les divers chiffrements, hachages utilisés que concernant le propriétaire du certificat et l'autorité qui l'a signé.

Dans l'ordre des surlignages:

  1. en jaune, l'autorité de certification,
  2. en orange, le propriétaire du certificat et le(s) domaine(s) qu'il certifie comme légitimes,
  3. en gris, la clé publique,
  4. en rouge, les chemins d'accès aux listes de révocation. Tout propriétaire d'un certificat a la possibilité et surtout, le devoir, de signaler à la CA émettrice que le certificat doit être révoqué, c'est-à-dire rendu caduque avant sa date d'expiration, s'il a été compromis ou s'il n'a plus de raison d'être. OCSP (Online Certificate Status Protocol) permet au client utilisant TLS/SSL de vérifier la validité du certificat.

C'est une bonne pratique, que de vérifier les informations des certificats surtout lorsqu'il s'agit de sites marchands ou nécessitant de donner des informations à caractère personnel (login, mot de passe, etc.). Normalement, un certificat périmé, répudié, auto-signé ou signé par une CA inconnue du système doit déclencher une alarme, sauf si le système de l'utilisateur a été compromis.