Dans cet exemple un certificat a été généré pour le serveur web traefik.mairie.local
.
L' outil en ligne de commande cURL ne retourne pas d'erreur lors de l'établissement d'une connexion avec le serveur
# Avec cURL, pas de message d'avertissement ou d'erreur curl --cacert ~/Nextcloud/certs/root_ca_tnf.crt --verbose "https://traefik.mairie.local"
Pourtant lorsqu'on tente d’accéder au site depuis le navigateur Web, un message d'avertissement est affiché Attention : risque probable de sécurité, en affichant les détails on voit apparaitre le code erreur:
Code d’erreur : SSL_ERROR_BAD_CERT_DOMAIN
Si on affiche le certificat émis, on constate qu'il contient bien certains champs de la norme X.509 mais pas le champ SAN (Subject Alternative Name)
openssl x509 -in traefik.mairie.local.cert.pem -noout -text | less
Dans la section x509v3 extensions, le champ X509v3 Subject Alternative Name (SAN) est absent:
. . . X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Cert Type: SSL Server Netscape Comment: OpenSSL Generated Server Certificate X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication . . .
Le standard X.509 version 3 est utilisée pour sécuriser les échanges sur le Web. Tous les sites web utilisant SSL/TLS ont un certificat X.509 et l'utilisent pour le chiffrement des échanges.
Des erreurs/avertissements peuvent être remontés par le navigateur si les extensions (ou champs) ne sont pas correctement introduits dans le certificat émis. Certains champs sont obligatoires et leur valeur doit être correctement définie.
Lors de la génération du Certificat, les extensions de la norme X509v3 peuvent être précisées à différentes étapes:
On définit ici un fichier de configuration listant les extensions X509 qui pourront être jointes lors de la création de la CSR ou du certificat (section x509v3_webserver).
# Fichiers de configuration des demandes de certificats # Certificate Signing Request (CSR) [ req ] # définitions des options pour openssl req default_bits = 2048 distinguished_name = distinguished_name string_mask = utf8only # Extensions à ajouter à la requete de certificat req_extensions = x509v3_webserver # SHA-1 is deprecated, so use SHA-2 instead. default_md = sha256 [ distinguished_name ] countryName = Country Name (2 letter code) countryName_default = FR countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name stateOrProvinceName_default = France localityName = Locality Name localityName_default = Haute Garonne 0.organizationName = Organization Name 0.organizationName_default = Mairie de Tournefeuille organizationalUnitName = Organizational Unit Name organizationalUnitName_default = Service informatique emailAddress = Email Address emailAddress_default = administrateur@mairie-tournefeuille.fr commonName = Common Name (user name, hostname or FQDN) commonName_max = 64 [ x509v3_webserver ] basicConstraints = CA:FALSE nsCertType = server nsComment = "OpenSSL Generated Server Certificate" keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [ alt_names ] #IP.1 = 192.168.33.123 #IP.n = x.x.x.x DNS.1 = www.example.com DNS.2 = 4w.example.com #DNS.n = *.exemple.fr
Depuis le répertoire de l'Autorité de Certification intermédiaire:
# Copier le fichier de configuration par défaut et adapter le contenu au certificat cp conf/server_cert_x509_extensions.cnf conf/traefik.mairie.local.x509.cnf # Editer conf/traefik.mairie.local.x509.cnf # La section [ alt_names ] doit contenir le ou les noms de l'hote
Recréer et vérifier la CSR:
# Commande de création de la CSR
openssl req -new -config conf/traefik.mairie.local.x509.cnf -key private/traefik.mairie.local.key -out csr/traefik.mairie.local.csr.pem
# On affiche la CSR et on vérifie les valeurs présentes après "Requested Extensions"
# notamment la présence du champ "X509v3 Subject Alternative Name"
openssl req -in csr/traefik.mairie.local.csr.pem -noout -text | grep "Requested Extensions" -A12
openssl x509 -req -days 30 -in ./csr/traefik.mairie.local.csr.pem -CA ./certs/intermediate_ca_tnf.cert.pem -CAkey ./private/intermediate_ca_tnf.key -CAcreateserial -out ./certs/traefik.mairie.local.cert.pem -extensions x509v3_webserver -extfile conf/traefik.mairie.local.x509.cnf
On peut vérifier que le certificat généré intègre bien les extensions x509v3:
# Affiche le contenu du certificat. Filtre les 12 lignes après la ligne contenant le mot "extensions" openssl x509 -in certs/traefik.mairie.local.cert.pem -noout -text | grep extensions -A12
Ci dessous le texte retourné dans la console:
X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Cert Type: SSL Server Netscape Comment: OpenSSL Generated Server Certificate X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Subject Alternative Name: DNS:traefik.mairie.local
Cette fois le champ X509v3 Subject Alternative Name est bien présent et contient le nom d’hôte de notre service web.
La copie de ce certificat sur le serveur web produit une connexion valide sans avertissement.