Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédente | |||
| 150-crypt:030_openssl [le 08/06/2025 à 15:20] – [Structure] prof | 150-crypt:030_openssl [le 08/06/2025 à 15:42] (Version actuelle) – prof | ||
|---|---|---|---|
| Ligne 169: | Ligne 169: | ||
| - | ====== Mise en œuvre d'une CA avec OpenSSL ====== | ||
| - | Sans aller jusqu' | ||
| - | |||
| - | Nous commençons par créer un répertoire de travail: | ||
| - | mkdir /democa | ||
| - | cd /democa | ||
| - | ===== Le certificat de l' | ||
| - | ==== Réalisation d'une clé privée ==== | ||
| - | Il faut une clé privée, propriété exclusive de la CA. C'est elle qui permettra de signer les certificats que notre CA va émettre. | ||
| - | Créons une clé ECDSA (Elliptic Curve Digital Signature Algorithm) de 256 bits : | ||
| - | openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve: | ||
| - | | ||
| - | La clé privée ne doit pouvoir être lue que par «root». Les bons droits ont été normalement attribués. Si ce n'est pas le cas: | ||
| - | chown < | ||
| - | chmod 600 democa.key | ||
| - | ==== Réalisation de la clé publique ==== | ||
| - | Créons maintenant un certificat X509 qui va contenir la clé publique associée à notre CA. Ce certificat servira aux clients de la CA de vérifier que les certificats demandés sont bien authentiques (chiffrement avec la clé privée = signature, déchiffrement au moyen de la clé publique pour authentifier la signature). | ||
| - | openssl req -key democa.key -new -x509 -days 3650 -addext keyUsage=critical, | ||
| - | | ||
| - | Ce sertificat sera valide depuis sa date de création et pour une durée de 3650 jours soit en gros en peu moins de 10 ans. | ||
| - | Le certificat devra être communiqué à tous les clients potentiels, qui devront l' | ||
| - | - ''/ | ||
| - | - ''/ | ||
| - | - ''/ | ||
| - | Pour que notre CA interne puisse être connue des clients potentiels, il faut sur chaque client: | ||
| - | - copier le certificat de notre CA dans ''/ | ||
| - | - exécuter la commande '' | ||
| - | Ceci doit répondre quelque chose du genre: | ||
| - | < | ||
| - | Updating certificates in / | ||
| - | <span class=" | ||
| - | Running hooks in / | ||
| - | done. | ||
| - | </ | ||
| - | ====== Les demandes de certificats ====== | ||
| - | une PKY digne de ce nom propose à ses clients une interface permettant de construire leur requête. Le but étant ici de faire la preuve du concept, l' | ||
| - | |||
| - | ===== Création de sa clé privée ===== | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | ===== Création de la CSR ===== | ||
| - | < | ||
| - | < | ||
| - | |||
| - | 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 ' | ||
| - | <span class=" | ||
| - | ----- | ||
| - | Country Name (2 letter code) [AU]:< | ||
| - | State or Province Name (full name) [Some-State]:< | ||
| - | Locality Name (eg, city) []:< | ||
| - | Organization Name (eg, company) [Internet Widgits Pty Ltd]:< | ||
| - | Organizational Unit Name (eg, section) []:< | ||
| - | Common Name (e.g. server FQDN or YOUR name) []:< | ||
| - | Email Address []:< | ||
| - | |||
| - | Please enter the following ' | ||
| - | to be sent with your certificate request | ||
| - | <span class = " | ||
| - | A challenge password []:<span class = " | ||
| - | An optional company name []:<span class = " | ||
| - | </ | ||
| - | Dans le répertoire de travail, nous retrouvons: | ||
| - | < | ||
| - | <b>ls -l</ | ||
| - | |||
| - | total 12 | ||
| - | -rw-rw-r-- 1 user user 570 2 juin 18:54 MyCert.csr | ||
| - | -rw------- 1 user user 241 2 juin 18:48 MyPrivate.key | ||
| - | </ | ||
| - | Le créateur de la requête peut en vérifier le contenu: | ||
| - | < | ||
| - | < | ||
| - | |||
| - | Certificate Request: | ||
| - | Data: | ||
| - | Version: 1 (0x0) | ||
| - | <span class=" | ||
| - | Subject Public Key Info: | ||
| - | <span class=" | ||
| - | Public-Key: (256 bit) | ||
| - | pub: | ||
| - | 04: | ||
| - | ff: | ||
| - | 2f: | ||
| - | 38: | ||
| - | ac: | ||
| - | ASN1 OID: prime256v1 | ||
| - | NIST CURVE: P-256 | ||
| - | Attributes: | ||
| - | (none) | ||
| - | Requested Extensions: | ||
| - | <span class=" | ||
| - | Signature Value: | ||
| - | 30: | ||
| - | 88: | ||
| - | 02: | ||
| - | 00: | ||
| - | </ | ||
| - | ===== Demande de certification ===== | ||
| - | Il faut maintenant transmettre le CSR à notre CA pour qu' | ||
| - | openssl x509 -req -in MyCert.csr -CA / | ||
| - | Certificate request self-signature ok | ||
| - | La CA octroie un certificat valide pour 365 jours. Cette durée ne peut dépasser la date de validité du certificat de la CA, pour des raisons évidentes. | ||
| - | |||
| - | L' | ||
| - | < | ||
| - | < | ||
| - | |||
| - | Certificate: | ||
| - | Data: | ||
| - | <span class=" | ||
| - | Serial Number: | ||
| - | 71: | ||
| - | Signature Algorithm: ecdsa-with-SHA256 | ||
| - | Issuer: CN=myca | ||
| - | Validity | ||
| - | Not Before: Jun 5 15:21:19 2025 GMT | ||
| - | Not After : Jun 5 15:21:19 2026 GMT</ | ||
| - | Subject: C=FR, ST=PACA, L=Marseille, | ||
| - | Subject Public Key Info: | ||
| - | Public Key Algorithm: id-ecPublicKey | ||
| - | Public-Key: (256 bit) | ||
| - | pub: | ||
| - | 04: | ||
| - | ff: | ||
| - | 2f: | ||
| - | 38: | ||
| - | ac: | ||
| - | ASN1 OID: prime256v1 | ||
| - | NIST CURVE: P-256 | ||
| - | X509v3 extensions: | ||
| - | X509v3 Subject Key Identifier: | ||
| - | A4: | ||
| - | X509v3 Authority Key Identifier: | ||
| - | F6: | ||
| - | Signature Algorithm: ecdsa-with-SHA256 | ||
| - | Signature Value: | ||
| - | 30: | ||
| - | d4: | ||
| - | 02: | ||
| - | 8a: | ||
| - | </ | ||
| - | La CA a apposé son cachet à la requête, en y ajoutant principalement un numéro de série, l' | ||
| - | |||
| - | L' | ||
| - | ====== Appel à Let's encrypt ====== | ||
| - | Les distributions GNU/Linux proposent l' | ||
| - | * disposer d'un nom de domaine officiel, | ||
| - | * disposer d'un serveur accessible depuis l' | ||
| - | |||
| - | ===== Champs DNS ===== | ||
| - | Pour les besoins de la démonstration, | ||
| - | |||
| - | Pour les besoins de certbot, des adresses IPv6 suffisent dans la zone «home.nain-t.net», | ||
| - | home.nain-t.net. | ||
| - | mail.home.nain-t.net. | ||
| - | <note tip> | ||
| - | ===== Appel de certbot ===== | ||
| - | Il est nécessaire que la CA puisse accéder à un serveur http implanté sur le demandeur. Si ce n'est pas le cas, certbot peut créer un mini serveur http temporaire, ce qui sera le cas ici. | ||
| - | |||
| - | Tous les paramètres utilisables avec la commande «certbot» sont détaillés dans le manuel et [[https:// | ||
| - | < | ||
| - | < | ||
| - | |||
| - | Saving debug log to / | ||
| - | Requesting a certificate for home.nain-t.net and mail.home.nain-t.net | ||
| - | |||
| - | <span class=" | ||
| - | Certificate is saved at: / | ||
| - | Key is saved at: / | ||
| - | < | ||
| - | These files will be updated when the certificate renews. | ||
| - | <span class=" | ||
| - | |||
| - | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
| - | If you like Certbot, please consider supporting our work by: | ||
| - | * Donating to ISRG / Let's Encrypt: | ||
| - | * Donating to EFF: https:// | ||
| - | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
| - | </ | ||
| - | Si les conditions sont respectées (résolution DNS correcte, port 80 accessible), | ||
| - | - Bien que les logs soient plutôt indigestes, ce n'est pas forcément inutile d'y aller faire un tour. | ||
| - | - la clé comme le certificat se trouvent dans des fichiers de suffixe «pem» (Privacy Enhancement for internet electronic Mail). Format défini par le [[https:// | ||
| - | - Let's Encrypt fournit des certificats d'une durée de validité de 3 mois. Il est donc nécessaire de penser à les renouveler avant expiration! | ||
| - | - certbot crée une tâche de fond qui se charge de réaliser automatiquement l' | ||
| - | - Si nous regardons de près le contenu de ''/ | ||
| - | - **cert.pem** est le certificat lui-même. Mais contrairement à notre essai de CA interne, Let's Encrypt n'est pas une CA «racine» Elle est elle-même certifiée par d' | ||
| - | - **chain.pem** décrit la suite de CA mise en œuvre. | ||
| - | - **fullchain.pem** contient toutes les informations. Une concaténation des deux informations précédentes. C'est ce certificat qu'il convient d' | ||
| - | |||
| - | Si nous regardons son contenu: | ||
| - | < | ||
| - | < | ||
| - | |||
| - | Certificate: | ||
| - | Data: | ||
| - | Version: 3 (0x2) | ||
| - | Serial Number: | ||
| - | 06: | ||
| - | Signature Algorithm: ecdsa-with-SHA384 | ||
| - | Issuer: C=US, O=Let' | ||
| - | Validity | ||
| - | Not Before: Apr 29 06:30:54 2025 GMT | ||
| - | Not After : Jul 28 06:30:53 2025 GMT | ||
| - | Subject: CN=home.nain-t.net | ||
| - | Subject Public Key Info: | ||
| - | Public Key Algorithm: id-ecPublicKey | ||
| - | Public-Key: (256 bit) | ||
| - | pub: | ||
| - | 04: | ||
| - | 64: | ||
| - | 16: | ||
| - | 0d: | ||
| - | bb: | ||
| - | ASN1 OID: prime256v1 | ||
| - | NIST CURVE: P-256 | ||
| - | X509v3 extensions: | ||
| - | X509v3 Key Usage: critical | ||
| - | Digital Signature | ||
| - | X509v3 Extended Key Usage: | ||
| - | TLS Web Server Authentication, | ||
| - | X509v3 Basic Constraints: | ||
| - | CA:FALSE | ||
| - | X509v3 Subject Key Identifier: | ||
| - | 52: | ||
| - | X509v3 Authority Key Identifier: | ||
| - | 9F: | ||
| - | Authority Information Access: | ||
| - | OCSP - URI: | ||
| - | CA Issuers - URI: | ||
| - | X509v3 Subject Alternative Name: | ||
| - | DNS: | ||
| - | X509v3 Certificate Policies: | ||
| - | Policy: 2.23.140.1.2.1 | ||
| - | X509v3 CRL Distribution Points: | ||
| - | Full Name: | ||
| - | URI: | ||
| - | |||
| - | CT Precertificate SCTs: | ||
| - | Signed Certificate Timestamp: | ||
| - | Version | ||
| - | Log ID : ED: | ||
| - | 01: | ||
| - | Timestamp : Apr 29 07: | ||
| - | Extensions: none | ||
| - | Signature : ecdsa-with-SHA256 | ||
| - | 30: | ||
| - | 0E: | ||
| - | 9D: | ||
| - | 04: | ||
| - | 17: | ||
| - | Signed Certificate Timestamp: | ||
| - | Version | ||
| - | Log ID : DD: | ||
| - | 3D: | ||
| - | Timestamp : Apr 29 07: | ||
| - | Extensions: none | ||
| - | Signature : ecdsa-with-SHA256 | ||
| - | 30: | ||
| - | 5F: | ||
| - | 21: | ||
| - | 9F: | ||
| - | FB: | ||
| - | Signature Algorithm: ecdsa-with-SHA384 | ||
| - | Signature Value: | ||
| - | 30: | ||
| - | e3: | ||
| - | eb: | ||
| - | 00: | ||
| - | a4: | ||
| - | fa: | ||
| - | </ | ||
Les certificats X509: Dernière modification le: 08/06/2025 à 15:20 par prof