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 13:13] – 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 1: | Ligne 1: | ||
{{tag> | {{tag> | ||
- | ====== Générer un certificat SAN pour localhost | + | ====== Générer un certificat SAN pour les services web locaux |
<note warning> | <note warning> | ||
- | Lors de mes différentes tentatives je n'ai pas pu générer | + | Lors de mes différentes tentatives je n'ai pas pu générer |
- | Pour pouvoir générer | + | Le principe est de gérer |
+ | Après plusieurs essais il ressort que: | ||
+ | * Les certificats SAN listant des TLD sont valides s'ils n' | ||
+ | * Les certificats SAN génériques sur un domaine de deuxieme niveau sont refusés: *.localhost, | ||
+ | * Les certificats SAN utilisant le wilcard sur un nom de domaine de troisième niveau sont valides: *.any.domain est valide | ||
+ | De ce que j'ai pu déduire le caractère générique (étoile ou **wilcard**) ne peut s' | ||
+ | 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' | ||
+ | * Certaines API incluses dans l' | ||
+ | |||
+ | |||
+ | |||
+ | 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 SAN avec des FQDN ( c'est à dire des noms de domaine de troisième niveau comme '' | ||
+ | |||
+ | 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> | ||
+ | # Depuis le répertoire de l' | ||
+ | cd intermediate_ca/ | ||
+ | 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 26: | Ligne 111: | ||
Voir le wiki [[sysadmin: | Voir le wiki [[sysadmin: | ||
+ | |||
+ | ===== Renouveler le certificat ===== | ||
+ | |||
+ | |||
+ | ===== Références ===== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// |