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:// |