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.
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:71Plutô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:
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.