J'ai créé un certificat de serveur auto-signé en utilisant la commande req -x509
d'OpenSSL et un fichier CONF. Le fichier CONF est présenté ci-dessous.
Lorsque j'examine le certificat avec l'outil de visualisation des certificats de Microsoft, il affiche un avertissement sur basicConstraints
(remarquez le petit point d'exclamation) :
Le fichier CONF utilise ce qui suit pour construire les basicConstraints
:
basicConstraints = critical,CA:FALSE
Conformément à la RFC 5280, le pathLen
ne devrait être présent que si CA:TRUE
et keyCertSign
sont présents. Le certificat du serveur ne remplit aucune de ces conditions (en plus, un test avec pathLen
a entraîné le même avertissement).
Pourquoi l'outil de certificat Microsoft émet-il un avertissement sur basicConstraints
? Qu'est-ce qui ne va pas avec cela ou que devrais-je faire pour le corriger ?
# Auto-signé (remarquez l'ajout de -x509) :
# openssl req -config example.conf -new -x509 -sha256 -newkey rsa:2048 -nodes -keyout example.key.pem -days 365 -out example.cert.pem
# Auto-signé avec une clé existante (remarquez l'ajout de -x509) :
# openssl req -config example.conf -new -x509 -sha256 -key example.key.pem -days 365 -out example.cert.pem
# Requête de signature (remarquez l'absence de -x509) :
# openssl req -config example.conf -new -newkey rsa:2048 -nodes -keyout example.key.pem -days 365 -out example.req.pem
# Requête de signature avec une clé existante (remarquez l'absence de -x509) :
# openssl req -config example.conf -new -key example.key.pem -days 365 -out example.req.pem
# Affichez-le :
# openssl x509 -in example.cert.pem -text -noout
# openssl req -in example.req.pem -text -noout
[ req ]
default_bits = 2048
default_keyfile = server-key.pem
distinguished_name = subject
req_extensions = req_ext
x509_extensions = x509_ext
string_mask = utf8only
# Le DN du sujet peut être formé à l'aide de X501 ou RFC 4514 (voir RFC 4519 pour une description).
# C'est une sorte de mashup. Par exemple, RFC 4514 ne fournit pas d'adresse e-mail.
[ subject ]
countryName = Nom du pays (code à 2 lettres)
countryName_default = US
stateOrProvinceName = Nom de l'État ou de la province (nom complet)
stateOrProvinceName_default = MD
localityName = Nom de la localité (par ex., ville)
localityName_default = Baltimore
organizationName = Nom de l'organisation (par ex., entreprise)
organizationName_default =
# Utilisez un nom convivial ici car il est présenté à l'utilisateur. Les noms DNS du serveur
# sont placés dans les noms alternatifs de sujet. De plus, les noms DNS ici sont obsolètes
# à la fois par l'IETF et les CA/Browser Forums.
commonName = Nom commun (par ex., FQDN du serveur ou VOTRE nom)
commonName_default = Example, LLC
emailAddress = Adresse e-mail
emailAddress_default = webmaster@example.com
# La section x509_ext est utilisée lors de la génération d'un certificat auto-signé. C.-à-d., openssl req -x509 ...
[ x509_ext ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
basicConstraints = critical,CA:FALSE
keyUsage = signature numérique, chiffrement de clé
subjectAltName = @alternate_names
nsComment = "Certificat généré par OpenSSL"
# La RFC 5280, section 4.2.1.12, rend l'EKU facultatif
# Les exigences de base des navigateurs CA/Browser, Appendice (B)(3)(G) me laissent perplexe
extendedKeyUsage = serverAuth
# La section req_ext est utilisée lors de la génération d'une demande de signature de certificat. C.-à-d., openssl req ...
[ req_ext ]
subjectKeyIdentifier = hash
basicConstraints = critical,CA:FALSE
keyUsage = signature numérique, chiffrement de clé
subjectAltName = @alternate_names
nsComment = "Certificat généré par OpenSSL"
# La RFC 5280, section 4.2.1.12, rend l'EKU facultatif
# Les exigences de base des navigateurs CA/Browser, Appendice (B)(3)(G) me laissent perplexe
extendedKeyUsage = serverAuth
[ alternate_names ]
DNS.1 = example.com
DNS.2 = www.example.com
DNS.3 = mail.example.com
DNS.4 = ftp.example.com
# Ajoutez-les si vous en avez besoin. Mais vous ne les voulez généralement pas
# ou vous n'en avez pas besoin en production. Vous pourriez en avoir besoin pour le développement.
# DNS.5 = localhost
# DNS.6 = localhost.localdomain
# DNS.7 = 127.0.0.1
# IPv6 localhost
# DNS.8 = ::1