GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser OpenSSL et Internet PKI sur les systèmes Linux

Cet article est la deuxième partie de trois couvrant les concepts de chiffrement et l'infrastructure à clé publique (PKI) Internet. Le premier article de cette série a présenté le chiffrement symétrique et à clé publique (asymétrique) en cryptographie. Si vous n'êtes pas familier avec le concept de base du chiffrement à clé publique, vous devriez lire la première partie avant de poursuivre celle-ci.

Dans cette partie, je vous montre les bases de Transport Layer Security et Secure Socket Layer (TLS/SSL), le fonctionnement de l'ICP Internet et OpenSSL, le couteau suisse pour les tâches TLS/SSL. J'explique comment utiliser OpenSSL pour créer des paires de clés et générer une demande de signature de certificat (CSR) à envoyer à votre autorité de certification (CA) pour signature. Après cela, j'aborde certaines faiblesses de l'ICP Internet dont vous devez être conscient.

[ Vous pourriez également apprécier :  Conseils de sécurité pour les administrateurs système :Posséder l'informatique, Sécuriser l'informatique, Protéger l'informatique ]

Préface

Supposons que vous êtes un administrateur système comme moi et que l'une de vos tâches consiste à gérer un serveur Web. Parce que vos utilisateurs se soucient de l'authenticité, de l'intégrité et de la confidentialité, vous aimeriez sécuriser votre application Web avec une sorte de cryptage.* Vous ne savez pas à l'avance qui utilise votre site, donc le cryptage symétrique n'est pas envisageable en raison de sa problème de distribution des clés. J'utilise plutôt le chiffrement à clé publique dans les sections suivantes.

TLS/SSL

Les acronymes de Transport Layer Security et Secure Socket Layer sont TLS et SSL. Ils sont utilisés de manière interchangeable la plupart du temps, et c'est OK. Bien que les anciennes versions du protocole SSL soient obsolètes, vous trouverez généralement TLSv1.2 et TLSv1.3 sur le Web ces jours-ci. TLS est utilisé dans les connexions HTTPS entre certains clients et certains serveurs Web. L'image suivante montre un exemple simple de poignée de main HTTPS.

Prise de contact TLS 1.2 complète avec données de synchronisation (Source :Full_TLS_1.2_Handshake.svg)

Tout d'abord, la poignée de main TCP bien connue se produit entre le client et le serveur. Ensuite, le client démarre la poignée de main HTTPS en envoyant le ClientHello . Dans cette étape, le client transmet des informations sur le nom du serveur qu'il demande et les suites de chiffrement prises en charge. Le serveur répond avec le ServerHello , transmet une suite de chiffrement sélectionnée, des paramètres de connexion et envoie des informations pour calculer une clé symétrique pour la connexion en cours. Enfin, il envoie son certificat pour s'authentifier auprès du client.

Si vous souhaitez acquérir une compréhension approfondie de TLS et SSL, je vous recommande le livre Bulletproof SSL and TLS par Ivan Ristic.

Concentrez-vous sur le certificat que le serveur a transmis au client. Il contient la clé publique du serveur, que le client utilise pour chiffrer les données avant de les envoyer au serveur. Une autorité de certification (CA) approuvée a signé la clé publique dans le certificat. Aujourd'hui, chaque système d'exploitation et navigateur Web est livré avec un magasin contenant les clés publiques de nombreuses autorités de certification de confiance différentes. Ces clés publiques sont ensuite utilisées pour vérifier les signatures dans les certificats de serveur comme celui décrit ici. De cette façon, le client peut vérifier l'authenticité du serveur et s'assurer qu'il s'agit du bon hôte auquel le client souhaite se connecter.

Comme vous pouvez le voir, le chiffrement à clé publique est utilisé dans ce scénario pour deux tâches :

  1. Vérifier l'authenticité du serveur
  2. Utiliser la clé publique du serveur pour transmettre des données chiffrées au serveur

Sachez que le chiffrement à clé publique est utilisé uniquement pour établir les connexions HTTPS et calculer une clé de session symétrique utilisée pour les communications ultérieures. En effet, le chiffrement symétrique est beaucoup plus rapide que le chiffrement asymétrique.

OpenSSL

Alors maintenant, la question est de savoir comment obtenir la paire de clés pour le serveur Web ? Comme indiqué précédemment, OpenSSL est le couteau suisse pour les tâches SSL et TLS. Étant donné que sa documentation laisse une marge d'amélioration, je vous suggère de lire le livre gratuit OpenSSL Cookbook d'Ivan Ristic pour obtenir tous les détails. Mon article se concentre sur la création d'une paire de clés et d'une demande de signature de certificat (CSR) pour un seul nom de domaine et d'une CSR qui inclut plusieurs noms de domaine.

Le CSR est nécessaire pour envoyer la clé publique et d'autres informations sur votre domaine à une autorité de certification pour signature. La clé publique signée que vous récupérerez est votre certificat que vous installerez sur votre serveur Web avec la clé privée correspondante.

Création d'une clé privée et d'un CSR pour un seul domaine

Ensuite, je vais vous donner un exemple de création d'une clé privée (RSA 2048 bits) et CSR en une seule étape. Vous saisirez toutes les informations nécessaires.

$ openssl req -newkey rsa:2048 -keyout example.com.key -out example.com.csr
Generating a RSA private key
...............+++++
.................................................................................................................+++++
writing new private key to 'example.com.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:EXAMPLE-STATE
Locality Name (eg, city) []:Example City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Ltd
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Vous trouverez les deux fichiers dans votre répertoire de travail actuel. La phrase de passe que vous avez saisie lors du processus de création protège votre fichier de clé privée. Si vous les ouvrez dans une sorte de visionneuse de texte, vous ne reconnaîtrez qu'il s'agit d'une clé privée et d'un CSR, mais vous ne trouverez pas d'autres informations en texte brut :

$ cat example.com.{key,csr}
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIaoQRP0LFgu4CAggA
MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECFWvUl1tJyJNBIIEyCFv43Q7xe+F
Am5EtIJO2FtwbjXV9hQpl4Zb4JlG7vQvt7aH1/hQcPFYnjJJnlu8gP84tne1riSc
2YWxsZQ3sZLtIOrVIqEOsCumJpoqS8AsAw/fuFIwRpXZenX2/snGwQSVN545BDGV
lzGnUph8lnrG9Kho5loiqYTAQWYUCwgLwe8fWOdXXWY6+UdKjJHaUYxHdkuMBvnQ
FJ+Iln4b4onLrGcFKJgNkJ/AShkW/m31ZvRXNX2QiKgl6u3zDTsE3l6rfVaPEJyx
g43guPil9nNrGS5rPt6XWEvtWSTfSFEVrMTBSTr1BrUipfnN3gFfCmtNqoSNdkjk
pI9vsRekjzGZnVp763WGXmxx59/sXwgLnA7Br5K+7B1ECA9Z8iRzfB4OmSrR8HVb
uYGRlq5jq/GgBTddFQRYUna0bufGRRBntIjOesYGbvWrg4dTnF8jncqvM+eXJtCv
Va0RrpTtuZbdRf3/5scjlFpvWQs705tbi777AIw9MySVpsgFY8eD8shKYNpQoRx5
kiILlkbabNK1EPOdnCBSCfHoK2ssZFKegc0xG8HLM4iwVS/fg3O02HS2jP74wPJ9
1sN81IvJ+W1OJ8MizkLJDc4bAER/yo9O7hMJ1ITxlUXWcr0Zwxi1cQzmLLocFh46
uKQ8N9iAEnl1m2Ax98hbxtrHVVjGBBbrcIrrp/KfMAUcM6goUjz2PG9+XI5/6bkA
0g4qSNVotdPaYTnco0eRClzxvollE8CBeVECql7+KN3VA0VM2Rtpb98QQZ+asKkY
fYf8byQLiCPED4NPkLeYKKL9CrMz+p7Zt3j/q5n0CLEbf/ZX8S6677m6+Hie9ArE
PU1fwpxonH9b4zvZnrsa9FfKW7zIWXq/tt885EjqzxvVUQKcCn2A3lXoXC3FoLaA
jmWKjue9vZAdn29C0E4+Ruk4oGfr/FipI4lZKH+sT1u86Gotjg2W3ZIe8I+Na7v/
SJnAO86L7cuG6PFHyt8tBYF7l3WV465GP5PW3bJc0TQnNRUoisMzEH0CRlwYqCHj
YIOeZWFCJeyR52Y8qI2yG/hgKMJQ4e/0vFy+y7lOdU6TSKZ96E3XEVjLPsHKCW0S
aEX1gLQdtoTQciwAnzrl9uu/xbyoW7CLTg7Hny8LgJZr+YQaILd1wljEX3KflicE
N7stTCj0eF8AH2LgPMhvJ9Zy6OGdVw/oU9rJXhQD3Z6WpQkCrrfE4/LymuXGdmGI
bGlCpuHB8Vlij4om2YnOZebPiDiOLZ9cawanmZkm3YedPbYJbv1NW9koToLKbuW8
1ZDyzcpFjOaYBtut6RdvNYfZ1OmJPd8jyKuGKRYnqDbeQ/Snk74BNkBiV+02ozGF
aGd1s45A94fFAtzFObY0HZ4JucjspJK6Y2yphPKhPHQiW7vm1mlvRgY3WN6DINq4
+3Irdwpxky7hxPToh2aUjzlTLdruqR1dk+JSV1+SFypoBhPBlbx/zglh0ncttbeM
5/Khgu+uXp+ePf7g64lnPFjVIoVBega4CAMHQqffA5c2z3f9qKThIH1IgS5e7GOR
GHL57MVtvBjUtUyc8eFx4EzgmWVV7D/JzxVDpUBWeAn1yNeOoxjuf2tkZgb/+GNi
tlbRN/s0Yo8lnbEuplF9UQ==
-----END ENCRYPTED PRIVATE KEY-----
-----BEGIN CERTIFICATE REQUEST-----
MIIC4TCCAckCAQAwgZsxCzAJBgNVBAYTAkRFMRYwFAYDVQQIDA1FWEFNUExFLVNU
QVRFMRUwEwYDVQQHDAxFeGFtcGxlIENpdHkxFDASBgNVBAoMC0V4YW1wbGUgTHRk
MQswCQYDVQQLDAJJVDEUMBIGA1UEAwwLZXhhbXBsZS5jb20xJDAiBgkqhkiG9w0B
CQEWFXdlYm1hc3RlckBleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAMAc6BwShsBWi1DcsHnF88m99fDiDESpD9zq4VCq+wpcc6RjPmAf
7uG8ha+CSiyvr9fDgJfzMDpDUG5W2R+WLQhe+9IS8VFHqpT7ePwHlFt7h+0Rx3ke
us9ErY085jFHvGziuhuh4fGE0Ez69LT0ZujeeNad2GEuGQSRTWuloNVTyFy0hIb2
f6fAsGBGbW9uSjW8L4hIPpmUgL5LDZ9Ev6p9/MrNITeUwkIi+FaM3NYrf9Xx2MI2
/frl7ZTl2uGyW8uh24sd6vMoaw1arI+RI/mcxyvADP5qAtnDRhXCPgZBPI0sFpX4
MAVj99+VvxahSubB3yxca8DDFn8cbBfZMBUCAwEAAaAAMA0GCSqGSIb3DQEBCwUA
A4IBAQADSBAnoTFFUphk7EnMRM34oFg4tzoGkV46eLLnUlu0cLmggzuw+BBg0/Zx
3vVjqu7wudr9bg+u0vNHc0UjuAmU5NVhwb4WHBZHw5Lba6WNKVLzYoC4ZzeU1MyW
TYh7O76mZzmXVpppotcK5uU5ojDhiiaxkQuqWlsk3txdf/qJ/1F/pFnHRydT0hMf
JQBYo7FLIa+ZuHEysjoUmoo0arLJyuymlWYWFMzV/ds0r4ci9AtUfUUbt3JgcVhZ
+h0KQNf26D96c9C+5v5PnV2pVs4tIzY08HQKEmbWqKyTWToxwID6Qi/dNqhDwt7B
UN4g4tNW1wIRPW76nHKGsgTRJFRq
-----END CERTIFICATE REQUEST-----

Eh bien, ce n'est pas très utile pour l'esprit humain, donc dans la section suivante, vous trouverez les commandes pour examiner les paramètres de votre clé privée et le CSR sous une forme plus lisible par l'homme.

Examen de la clé privée

Attention :Ne partagez jamais votre ou vos clés privées avec qui que ce soit. Ils sont à vous et à vous seulement. Gardez-les secrets, sains et saufs. Suivez les politiques de votre organisation pour la gestion des clés privées, des CSR et des certificats. La sécurité de votre organisation (et de votre travail) peut en dépendre.

L'exemple suivant vous montre à quoi ressemble une clé privée. En fonctionnement normal, il n'est généralement pas nécessaire d'imprimer une clé privée comme celle-là.

$ openssl pkey -text -noout -in example.com.key
Enter pass phrase for example.com.key:
RSA Private-Key: (2048 bit, 2 primes)
modulus:
    00:c0:1c:e8:1c:12:86:c0:56:8b:50:dc:b0:79:c5:
    f3:c9:bd:f5:f0:e2:0c:44:a9:0f:dc:ea:e1:50:aa:
    fb:0a:5c:73:a4:63:3e:60:1f:ee:e1:bc:85:af:82:
    4a:2c:af:af:d7:c3:80:97:f3:30:3a:43:50:6e:56:
    d9:1f:96:2d:08:5e:fb:d2:12:f1:51:47:aa:94:fb:
    78:fc:07:94:5b:7b:87:ed:11:c7:79:1e:ba:cf:44:
    ad:8d:3c:e6:31:47:bc:6c:e2:ba:1b:a1:e1:f1:84:
    d0:4c:fa:f4:b4:f4:66:e8:de:78:d6:9d:d8:61:2e:
    19:04:91:4d:6b:a5:a0:d5:53:c8:5c:b4:84:86:f6:
    7f:a7:c0:b0:60:46:6d:6f:6e:4a:35:bc:2f:88:48:
    3e:99:94:80:be:4b:0d:9f:44:bf:aa:7d:fc:ca:cd:
    21:37:94:c2:42:22:f8:56:8c:dc:d6:2b:7f:d5:f1:
    d8:c2:36:fd:fa:e5:ed:94:e5:da:e1:b2:5b:cb:a1:
    db:8b:1d:ea:f3:28:6b:0d:5a:ac:8f:91:23:f9:9c:
    c7:2b:c0:0c:fe:6a:02:d9:c3:46:15:c2:3e:06:41:
    3c:8d:2c:16:95:f8:30:05:63:f7:df:95:bf:16:a1:
    4a:e6:c1:df:2c:5c:6b:c0:c3:16:7f:1c:6c:17:d9:
    30:15
publicExponent: 65537 (0x10001)
privateExponent:
    3d:34:f8:7e:79:28:95:7e:fd:43:f6:0c:03:c0:1d:
    bb:d8:d9:d2:b5:32:53:6d:c9:b0:08:e5:60:5e:19:
    3d:63:d7:34:38:aa:56:d5:d5:b5:f5:ea:61:d0:90:
    f1:4b:c8:2a:66:0f:42:5a:28:b3:67:5e:e8:c8:a2:
    c4:7d:84:3b:76:87:a4:96:84:6b:f0:f9:58:1e:06:
    9d:c5:8c:6e:d9:1c:a5:5b:54:c2:32:18:32:91:1e:
    fa:30:bc:e6:56:84:a1:ec:5a:7f:13:44:79:3e:67:
    5f:1f:55:77:91:a6:77:ea:e9:74:f7:35:49:40:f6:
    97:8d:f3:ac:a8:48:65:ae:8e:84:34:16:d8:e8:7d:
    71:b2:30:29:df:fd:db:ff:8a:0f:68:af:d5:76:48:
    15:ec:78:14:51:1b:13:de:45:d0:73:7d:cd:32:9a:
    0c:08:3f:1e:2a:67:c4:db:51:b8:74:e2:1f:ba:a7:
    86:6c:9f:7f:9d:49:75:5a:54:47:3d:01:e6:64:83:
    7d:6b:d9:52:0a:d8:f3:a7:1a:28:61:f2:01:9b:32:
    e2:cf:99:2b:3a:35:f1:21:88:f8:37:c7:80:80:69:
    2e:2b:05:9b:00:c8:49:a9:08:a9:bf:d3:74:e0:0c:
    18:13:35:74:e9:03:d6:6b:6b:09:bd:b3:9c:b9:04:
    c1
prime1:
    00:e0:d6:d1:18:cd:60:b2:18:29:93:3f:7a:79:e3:
    9b:59:f6:f6:52:74:3d:65:df:92:8f:2c:dc:fb:06:
    ca:c1:e6:85:d7:2e:a8:1c:04:1d:07:e1:be:0a:64:
    e4:75:5f:44:71:6b:a7:16:94:46:81:e0:65:b3:09:
    3a:55:0e:a8:f0:d9:ee:9f:4e:b4:46:c9:9a:32:b7:
    f4:63:9f:b7:e2:54:8c:6f:8f:52:a1:98:07:34:04:
    da:56:38:02:f0:4b:54:48:c1:20:29:23:08:19:93:
    69:4e:7a:a5:ab:e4:8a:c3:f5:85:37:82:fa:73:ca:
    51:fa:f6:9d:4b:d9:ae:b7:eb
prime2:
    00:da:bc:fa:d3:56:b9:6d:82:73:95:9f:b7:42:42:
    4a:eb:5a:98:5c:9c:4d:f7:60:1b:46:1b:6b:87:a5:
    b3:8b:ce:a4:fe:2b:ee:65:89:5c:85:22:e0:71:62:
    cf:2a:36:ac:aa:1d:d3:66:29:c4:dc:dc:5a:d8:6d:
    ce:52:9a:ea:b4:12:c6:24:79:d2:50:08:27:e1:a5:
    3d:50:01:5a:fe:1e:86:c5:e1:d7:34:24:d3:00:84:
    fa:45:ab:20:69:17:9d:c7:16:8a:04:85:e3:4b:df:
    08:5d:71:63:74:d4:78:fd:ea:c5:9c:61:68:55:bc:
    f9:3b:0d:96:80:a1:45:b7:ff
exponent1:
    19:ce:4e:1d:8c:a5:06:8b:e3:69:b5:25:77:8b:fa:
    2e:af:3b:c2:66:f9:0d:12:46:1e:0c:c6:28:41:b5:
    4f:e0:07:88:95:20:52:66:de:76:23:20:ce:cc:99:
    b4:27:05:12:07:8b:1b:fa:54:c5:5f:5e:0c:d8:88:
    4b:6e:ed:51:07:92:6d:d2:78:ba:8f:35:15:91:2b:
    89:ab:b1:4d:56:ea:ef:7b:01:be:ee:56:15:50:61:
    46:f8:12:ce:45:b7:1c:ca:9d:c8:5a:ee:f9:10:84:
    4b:af:a4:08:40:a8:f4:a8:df:6b:69:ab:19:53:25:
    69:aa:98:8f:36:22:e9:95
exponent2:
    68:45:57:e8:30:da:39:da:ca:d0:93:8f:5f:75:8c:
    93:3e:df:8c:9e:32:08:6f:76:f0:e7:97:4d:d5:6e:
    8e:81:d6:63:17:7c:10:48:f7:a2:bb:aa:74:42:9e:
    f0:c7:99:6d:8a:c4:40:5a:3e:ee:ed:d8:1c:7d:d3:
    b1:cb:09:81:07:c6:0e:93:47:ef:40:c4:0a:2b:a3:
    db:a4:99:c4:b3:b6:99:53:fc:2b:6e:36:6b:73:f8:
    7e:07:82:6e:b6:84:4e:e8:6e:a8:93:4e:73:d7:80:
    fc:52:56:0f:d6:4d:4a:f5:84:77:f4:73:31:13:e1:
    57:06:36:2d:61:33:83:ef
coefficient:
    00:99:64:d8:95:ad:72:3b:f0:a9:4d:d5:94:72:e3:
    5e:bd:17:42:1a:65:c9:1b:bb:eb:e8:09:1a:f8:c6:
    93:ee:9d:1d:39:b0:4f:35:70:a6:c3:0c:1f:45:fa:
    4b:e3:07:d3:00:6d:20:c7:d9:07:7f:2f:11:25:81:
    45:52:21:be:c6:39:a4:42:3d:a8:29:22:a4:80:69:
    0f:b6:aa:39:c5:9d:35:81:8b:36:20:f4:93:0c:2c:
    4e:25:95:e9:02:5e:ed:97:6d:84:70:97:11:78:26:
    4f:f6:76:7b:f2:b9:3c:08:59:6c:44:50:16:f0:41:
    51:16:0a:b4:74:92:f3:3c:2c

Examiner le CSR

L'exemple suivant vous montre comment examiner votre CSR avant de la soumettre à une autorité de certification pour signature.

$ openssl req -text -noout -in example.com.csr
Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: C = DE, ST = EXAMPLE-STATE, L = Example City, O = Example Ltd, OU = IT, CN = example.com, emailAddress = [email protected]
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:c0:1c:e8:1c:12:86:c0:56:8b:50:dc:b0:79:c5:
                    f3:c9:bd:f5:f0:e2:0c:44:a9:0f:dc:ea:e1:50:aa:
                    fb:0a:5c:73:a4:63:3e:60:1f:ee:e1:bc:85:af:82:
                    4a:2c:af:af:d7:c3:80:97:f3:30:3a:43:50:6e:56:
                    d9:1f:96:2d:08:5e:fb:d2:12:f1:51:47:aa:94:fb:
                    78:fc:07:94:5b:7b:87:ed:11:c7:79:1e:ba:cf:44:
                    ad:8d:3c:e6:31:47:bc:6c:e2:ba:1b:a1:e1:f1:84:
                    d0:4c:fa:f4:b4:f4:66:e8:de:78:d6:9d:d8:61:2e:
                    19:04:91:4d:6b:a5:a0:d5:53:c8:5c:b4:84:86:f6:
                    7f:a7:c0:b0:60:46:6d:6f:6e:4a:35:bc:2f:88:48:
                    3e:99:94:80:be:4b:0d:9f:44:bf:aa:7d:fc:ca:cd:
                    21:37:94:c2:42:22:f8:56:8c:dc:d6:2b:7f:d5:f1:
                    d8:c2:36:fd:fa:e5:ed:94:e5:da:e1:b2:5b:cb:a1:
                    db:8b:1d:ea:f3:28:6b:0d:5a:ac:8f:91:23:f9:9c:
                    c7:2b:c0:0c:fe:6a:02:d9:c3:46:15:c2:3e:06:41:
                    3c:8d:2c:16:95:f8:30:05:63:f7:df:95:bf:16:a1:
                    4a:e6:c1:df:2c:5c:6b:c0:c3:16:7f:1c:6c:17:d9:
                    30:15
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         03:48:10:27:a1:31:45:52:98:64:ec:49:cc:44:cd:f8:a0:58:
         38:b7:3a:06:91:5e:3a:78:b2:e7:52:5b:b4:70:b9:a0:83:3b:
         b0:f8:10:60:d3:f6:71:de:f5:63:aa:ee:f0:b9:da:fd:6e:0f:
         ae:d2:f3:47:73:45:23:b8:09:94:e4:d5:61:c1:be:16:1c:16:
         47:c3:92:db:6b:a5:8d:29:52:f3:62:80:b8:67:37:94:d4:cc:
         96:4d:88:7b:3b:be:a6:67:39:97:56:9a:69:a2:d7:0a:e6:e5:
         39:a2:30:e1:8a:26:b1:91:0b:aa:5a:5b:24:de:dc:5d:7f:fa:
         89:ff:51:7f:a4:59:c7:47:27:53:d2:13:1f:25:00:58:a3:b1:
         4b:21:af:99:b8:71:32:b2:3a:14:9a:8a:34:6a:b2:c9:ca:ec:
         a6:95:66:16:14:cc:d5:fd:db:34:af:87:22:f4:0b:54:7d:45:
         1b:b7:72:60:71:58:59:fa:1d:0a:40:d7:f6:e8:3f:7a:73:d0:
         be:e6:fe:4f:9d:5d:a9:56:ce:2d:23:36:34:f0:74:0a:12:66:
         d6:a8:ac:93:59:3a:31:c0:80:fa:42:2f:dd:36:a8:43:c2:de:
         c1:50:de:20:e2:d3:56:d7:02:11:3d:6e:fa:9c:72:86:b2:04:
         d1:24:54:6a

Créer un CSR incluant plusieurs noms de domaine

Il existe des situations où votre application est accessible sous différents noms de domaine comme :

  • exemple.com
  • www.exemple.com
  • application.exemple.com

Pour créer un CSR contenant les trois noms de domaine, vous pouvez utiliser un fichier de configuration. Par exemple, utilisez votre éditeur de texte préféré pour créer un fichier avec le contenu suivant :

[ req ]
default_bits = 2048
default_keyfile = test_privatekey.pem
distinguished_name = req_distinguished_name
encrypt_key = no
prompt = no
string_mask = nombstr
req_extensions = v3_req

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = DNS:example.com, DNS:www.example.com, DNS: app.example.com

[ req_distinguished_name ]
countryName = DE
stateOrProvinceName = EXAMPLE-STATE
localityName = Example City
0.organizationName = Example Ltd.
organizationalUnitName = IT
commonName = example.com

La première section [ req ] spécifie qu'une clé RSA privée de 2048 bits doit être générée et stockée sous test_privatekey.pem . En outre, la section contient des informations sur la recherche des bits que vous avez entrés de manière interactive dans la section précédente de cet article (dans la section [ req_distinguished_name ] . Dans [ v3_req ] , vous trouverez des contraintes sur keyUsage mais plus important encore, pour cet article, le paramètre subjectAltName où le nom commun et tous les noms supplémentaires sont spécifiés. Enregistrez-le sous openssl.cnf et exécutez-le avec la commande suivante pour créer une clé privée et un CSR :

$ openssl req -batch -new -config openssl.cnf -out example.com.csr
Generating a RSA private key
.......................................................................+++++
...................................+++++
writing new private key to 'test_privatekey.pem'
-----

$ ls
example.com.csr  openssl.cnf  test_privatekey.pem

Sachez que dans cet exemple, une phrase de passe ne protège pas la clé privée. Cela est pratique lorsque vous souhaitez qu'un serveur Web puisse le lire. Mais gardez un œil dessus et gardez-le en sécurité.

Le CSR est stocké dans example.com.csr et vous pouvez vérifier le contenu comme avant :

$ openssl req -text -noout -in example.com.csr
Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: C = DE, ST = EXAMPLE-STATE, L = Example City, O = Example Ltd., OU = IT, CN = example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:b4:ce:85:79:cc:74:f4:36:13:fe:c0:ff:57:6a:
                    31:0f:68:80:17:eb:f4:0f:b5:3f:56:dd:34:c8:4d:
                    a8:3f:f0:5f:fa:0a:f8:94:4d:3b:92:59:05:c2:c3:
                    8f:54:40:5d:db:d7:d8:f8:e5:a7:f4:a4:d5:77:18:
                    cc:dc:21:37:f1:72:23:28:16:f2:fe:03:67:a1:e3:
                    22:3d:85:80:0b:dd:e2:44:95:97:5f:12:3d:ab:f2:
                    8c:0d:71:c3:8a:76:4f:d1:5b:89:5b:14:c4:e3:33:
                    2e:5f:5a:1d:46:e0:4b:7b:f0:cf:ba:a5:ab:35:7f:
                    57:70:b0:97:0d:47:d8:3e:0c:ef:15:45:2d:c2:df:
                    d7:3b:91:6f:1b:2e:96:e3:a5:3f:32:32:ad:67:57:
                    5b:72:09:35:a8:bc:e6:78:07:c5:65:ea:f7:29:3d:
                    77:2e:3c:6b:e8:94:49:2b:28:de:9c:11:92:bf:05:
                    b8:ab:05:d1:51:78:82:13:58:f4:79:4f:ad:f4:ec:
                    42:8d:74:12:22:48:c0:6f:87:95:45:2d:8e:6d:2f:
                    78:ab:d9:41:c5:56:bb:ed:b9:5d:23:d9:6e:f9:80:
                    88:3d:2b:f2:f9:a3:45:98:15:99:19:c0:65:22:df:
                    8a:b2:e1:71:9e:7f:42:8d:6f:ce:9a:81:18:a4:22:
                    b3:85
                Exponent: 65537 (0x10001)
        Attributes:
        Requested Extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature, Key Encipherment, Data Encipherment
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Subject Alternative Name:
                DNS:example.com, DNS:www.example.com, DNS:app.example.com
    Signature Algorithm: sha256WithRSAEncryption
         96:4b:00:08:e3:44:20:fe:b4:45:01:ac:e6:28:27:f9:22:e4:
         da:ea:99:45:d3:dd:44:04:b6:c8:29:2f:a9:5d:f2:bb:92:6e:
         86:a4:c6:22:fb:1b:c0:89:29:bc:00:b4:69:bc:cf:29:01:e7:
         b3:d2:b6:f5:cc:95:b1:d1:a2:f6:8d:b4:40:a4:94:4f:7f:1d:
         cc:aa:d4:9c:7e:6d:53:2d:eb:2a:7a:2f:0e:b8:c0:4d:13:71:
         19:dd:30:2c:d6:ed:03:a9:70:ff:90:71:82:6a:4e:64:93:1e:
         60:c4:f3:cc:16:07:81:47:63:e9:4a:f5:79:99:b8:5e:e0:e1:
         bb:68:8b:45:08:91:4a:d6:dc:70:e6:b4:75:11:77:a6:3d:54:
         64:55:50:9f:27:1d:fe:d2:96:19:7b:d2:10:a5:4b:ef:33:6e:
         9d:31:5b:a3:4e:89:11:b6:09:c6:07:d6:c9:8e:e7:88:c9:be:
         9a:78:3e:2c:82:76:08:20:e0:1a:e8:9e:fd:7a:b0:3c:6b:5c:
         60:a1:77:98:7c:dd:98:93:c6:d8:d3:f4:de:9a:8f:5a:f3:10:
         d1:df:18:a7:7d:bc:2c:50:4e:b9:bf:90:62:57:46:2f:39:b9:
         82:1d:5a:1c:bc:92:9f:5b:7e:e0:ac:7d:29:63:fb:04:e9:71:
         68:53:33:90

Vous devriez reconnaître la section x509v3 Subject Alternative Name contenant tous les noms de domaine dont vous avez besoin.

Que vous ayez besoin d'un seul nom de domaine ou de plusieurs dans votre certificat, vous savez maintenant comment générer le CSR nécessaire. Pour une compréhension approfondie, je vous suggère de vous référer au livre que j'ai recommandé ci-dessus.

L'ICP Internet

Maintenant que vous avez un CSR prêt à être signé par une autorité de certification de confiance, il est temps d'examiner l'ICP Internet. Voici un aperçu de base. Pour plus de détails, reportez-vous à la RFC 5280.

Dans la PKI Internet, il existe les rôles suivants :

Abonné - Quelqu'un qui souhaite fournir un service sécurisé TLS/SSL. Donc probablement toi et moi.

Autorité de certification (AC) - Vérifie l'identité des abonnés ou de leurs domaines et émet des certificats pouvant être installés sur des serveurs Web. Il fournit également des informations sur les certificats qui ont été révoqués.

Partie de confiance - Il peut s'agir d'un navigateur Web ou d'un autre type de client qui tente de valider le certificat envoyé par votre serveur Web. Des ancres dites de confiance sont utilisées pour vérifier le certificat. Les ancres de confiance sont des certificats entièrement fiables et conservés dans le magasin CA de confiance du navigateur.

En règle générale, le flux de travail suivant est terminé avant qu'un navigateur Web ne vérifie un certificat de votre serveur Web.

  1. Générer une clé privée avec OpenSSL
  2. Créer un CSR avec OpenSSL
  3. Soumettre le CSR à l'autorité de certification pour signature
  4. Recevoir le certificat signé de l'autorité de certification
  5. Installez la clé privée et le certificat sur votre serveur Web
  6. Vos utilisateurs/clients peuvent commencer à utiliser votre site/application

Rappelez-vous ce que vous savez déjà sur le chiffrement à clé publique. Vous pouvez utiliser la clé privée pour signer un message et utiliser la clé publique correspondante pour vérifier la signature. Quelque chose de très similaire se produit lorsque l'autorité de certification signe votre clé publique et émet votre certificat.

Le certificat lui-même est une structure de données qui inclut des informations sur vous ou votre organisation. Il contient le nom de domaine, votre clé publique, le nom de l'autorité de certification qui a émis le certificat et la signature de l'autorité de certification. Pour vous donner un exemple, je vais vous montrer le certificat actuellement utilisé sur mon blog personnel et en expliquer les sections les plus importantes (raccourcies pour une meilleure vue d'ensemble).

$ echo "" |openssl s_client -connect www.my-it-brain.de:443 | openssl x509 -text -noout
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = www.my-it-brain.de
verify return:1
DONE
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            04:50:26:2d:14:91:0f:23:32:af:19:d8:38:a6:00:cf:b4:d6
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, O = Let's Encrypt, CN = R3
        Validity
            Not Before: Feb 16 22:34:35 2021 GMT
            Not After : May 17 22:34:35 2021 GMT
        Subject: CN = www.my-it-brain.de
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    [...]
                Exponent: 65537 (0x10001)
        X509v3 extensions:
[...]

La partie après "Certificat : " contient des informations telles que le numéro de série, l'algorithme de signature utilisé pour signer la clé publique, le nom de l'émetteur, la période de validité de ce certificat, le nom de domaine et la clé publique. Mais regardez les toutes premières lignes comme ils indiquent le chemin de signature :

depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = www.my-it-brain.de
verify return:1
DONE

Ce que vous voyez est la chaîne de confiance. Vous pouvez voir que ce certificat (la clé publique associée au FQDN www.my-it-brain.de ) a été signé par Let's Encrypt R3 (R3 est le nom du certificat) qui à son tour a été signé par Digital Signature Trust Co. DST Root CA X3 (ici DST Root CA X3 est le nom du certificat).

Mais comment votre navigateur sait-il s'il doit faire confiance à l'un de ces certificats ? Le certificat DST Root CA X3 est stocké dans l'ancre de confiance de votre navigateur. Voir l'image suivante, qui montre l'ancre de confiance de mon navigateur :

Cette entrée indique à votre navigateur de faire confiance à tous les certificats signés par DST Root CA X3. Une chaîne de confiance est établie jusqu'à mon certificat feuille pour www.my-it-brain.de . La figure suivante illustre le fonctionnement de la chaîne de confiance.

Source de l'image : Yuhkih, CC BY-SA 4.0.

Notez qu'entre votre certificat d'entité finale et une ancre de confiance dans le magasin de votre navigateur, il peut y avoir plusieurs certificats intermédiaires. Il est important que votre navigateur puisse vérifier chaque certificat le long de la chaîne pour vérifier votre certificat feuille. C'est important à noter car si votre navigateur manque l'un des certificats intermédiaires, la vérification de votre certificat échouera.

Habituellement, vous obtiendrez un certificat de chaîne complète de votre autorité de certification, y compris votre certificat et tous les intermédiaires impliqués, jusqu'à un certificat racine résidant dans l'ancre de confiance de votre navigateur. Il est considéré comme une bonne pratique de configurer votre serveur Web pour fournir la chaîne complète afin que vos utilisateurs aient une expérience agréable en visitant votre site.

[ Vous pensez à la sécurité ? Consultez ce guide gratuit pour renforcer la sécurité du cloud hybride et protéger votre entreprise. ] 

Récapitulez

Dans le premier article de cette série, vous avez appris les bases des concepts de chiffrement. Dans cet article, vous avez reçu une vue d'ensemble de haut niveau sur TLS/SSL et l'outil OpenSSL, apprenant à créer des clés privées et des CSR, que vous pouvez envoyer à une autorité de certification pour signature. En outre, l'ICP Internet a été introduite avec la chaîne de confiance, montrant comment fonctionne le processus de vérification.

Dans le prochain article de cette série, j'examinerai certains problèmes de PKI Internet et ce que vous pouvez faire pour les résoudre.

*Bien sûr, il y a une autre raison :votre site Web sera moins bien classé dans les résultats de recherche s'il n'utilise pas le cryptage TLS/SSL.


Linux
  1. Comment utiliser la commande Linux grep

  2. Comment utiliser la commande history sous Linux

  3. Comment créer un alias et utiliser la commande Alias ​​sous Linux

  4. Comment utiliser la commande ssh-keygen sous Linux

  5. Comment atténuer les vulnérabilités Spectre et Meltdown sur les systèmes Linux ?

Comment utiliser et tirer le meilleur parti de la commande fuser sous Linux

Comment configurer la clé publique et privée SSH sous Linux

Comment installer et utiliser Telnet sur les systèmes Linux

Comment installer et utiliser la commande Ack sous Linux

Comment générer et utiliser la clé SSH dans le système Linux ?

Linux perf :comment utiliser la commande et le profileur