Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| sysadmin:linux:gestion_certificats:generer_certificat_san_localhost [2021/10/28 17:30] – yoann | sysadmin:linux:gestion_certificats:generer_certificat_san_localhost [2022/08/02 15:55] (Version actuelle) – ajout d'une référence externe yoann | ||
|---|---|---|---|
| Ligne 9: | Ligne 9: | ||
| Après plusieurs essais il ressort que: | Après plusieurs essais il ressort que: | ||
| - | * Les certificats SAN sur un TLD sont valides s'ils n' | + | * Les certificats SAN listant des TLD sont valides s'ils n' |
| - | * Les certificats SAN génériques sur un TLD sont refusés: *.localhost, | + | * Les certificats SAN génériques sur un domaine de deuxieme niveau |
| - | * Les certificats SAN génériques sous un nom de domaine de deuxième | + | * Les certificats SAN utilisant le wilcard sur un nom de domaine de troisième |
| + | De ce que j'ai pu déduire le caractère générique (étoile ou **wilcard**) ne peut s' | ||
| - | Qui qu'il en soit, c'est en général une mauvaise idée de travailler directement avec localhost ou avec un TLD: | + | Pour rappel le FQDN est formaté ainsi: server.subdomain.domain.tld. |
| + | |||
| + | Notons également que c'est en général une mauvaise idée de travailler directement avec .localhost ou avec un TLD: | ||
| * L' | * L' | ||
| * Certaines API incluses dans l' | * Certaines API incluses dans l' | ||
| - | Pour ces raisons, il est préférable de générer un certificat | + | |
| + | |||
| + | Ci-dessous pour rappel les manipulations faites avec un certificat de test | ||
| + | |||
| + | <code bash> | ||
| + | # Affiche la valeur du champ SAN (Subject Alternate Name) | ||
| + | openssl x509 -noout -text -in service.localhost.crt | grep -i -A 1 " | ||
| + | X509v3 Subject Alternative Name: | ||
| + | IP Address: | ||
| + | </ | ||
| + | |||
| + | Comme on peut le voir ci-dessus, le champ SAN contient une adresse IP 127.0.0.1, si on contacte le serveur qui a cette même IP tout se passe bien: | ||
| + | |||
| + | <code bash> | ||
| + | curl -v --cacert ca-chain.cert.pem https:// | ||
| + | ... | ||
| + | * subjectAltName: | ||
| + | </ | ||
| + | |||
| + | Le champ SAN contient deux noms localhost et any, ici encore tout se passe bien: | ||
| + | <code bash> | ||
| + | curl -v --cacert ca-chain.cert.pem https:// | ||
| + | ... | ||
| + | * subjectAltName: | ||
| + | </ | ||
| + | |||
| + | C'est pour les valeurs *.any et *.localhost du certificat que le résultat obtenu est différent de celui attendu. Le caractère générique devrait nous permettre d' | ||
| + | |||
| + | <code bash> | ||
| + | curl -v --cacert ca-chain.cert.pem https:// | ||
| + | ... | ||
| + | * subjectAltName does not match traefik.any | ||
| + | * SSL: no alternative certificate subject name matches target host name ' | ||
| + | * Closing connection 0 | ||
| + | * TLSv1.3 (OUT), TLS alert, close notify (256): | ||
| + | curl: (60) SSL: no alternative certificate subject name matches target host name ' | ||
| + | More details here: https:// | ||
| + | </ | ||
| + | |||
| + | Cette erreur ne se manifeste plus au niveau inférieur avec *.service.localhost | ||
| + | <code bash> | ||
| + | curl -v --cacert ca-chain.cert.pem https:// | ||
| + | ... | ||
| + | * subjectAltName: | ||
| + | </ | ||
| + | |||
| + | |||
| + | Pour ces raisons, il est préférable de générer un certificat | ||
| + | |||
| + | En utilisant .localhost en TLD on évite tout risque collision (La RFC 2606 le définit comme l'un des quatre domaines de premier niveau réservé). Aucun sous-domaines réels dans le système de nom de domaine (Domain Name System) d' | ||
| + | |||
| + | |||
| + | Pour que le nom de domaine évoque bien que l' | ||
| <code bash> | <code bash> | ||
| # Depuis le répertoire de l' | # Depuis le répertoire de l' | ||
| cd intermediate_ca/ | cd intermediate_ca/ | ||
| - | export dn=srv.localhost | + | export dn=localhost |
| + | |||
| + | # Création de la clé privée | ||
| + | openssl genrsa -out private/ | ||
| + | chmod 400 private/ | ||
| + | |||
| + | # Création de la CSR | ||
| + | openssl req -new -config CSR.cnf -key private/ | ||
| + | </ | ||
| + | |||
| + | Préparer le fichier des extensions X509 en complétant la section '' | ||
| + | |||
| + | <code bash> | ||
| + | # Création du certificat | ||
| + | openssl x509 -req -extfile build_cert_with_SAN.ext -days 30 -in csr/$dn.csr -CA certs/ | ||
| + | |||
| + | # effacer la variable | ||
| + | unset $dn | ||
| </ | </ | ||
| - | ===== Tester la connexion ===== | ||
| Ligne 51: | Ligne 122: | ||
| * https:// | * https:// | ||
| * https:// | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||