115 votes

Certificat SSL auto-signé invalide - "Subject Alternative Name Missing" (Nom alternatif du sujet manquant)

Récemment, Chrome a cessé de fonctionner avec mes certificats SSL auto-signés, et pense qu'ils ne sont pas sûrs. Lorsque je regarde le certificat dans le DevTools | Security Je peux voir qu'il est écrit

Subject Alternative Name Missing Le certificat de ce site ne contient pas d'ex pas d'extension Subject Alternative Name contenant un nom de domaine ou une adresse ou une adresse IP.

Erreur de certificat Il y a des problèmes avec la chaîne de certificats du site (net::ERR_CERT_COMMON_NAME_INVALID).

Comment puis-je réparer cela ?

36 votes

Comment n'est-ce pas une question de programmation..... il s'agit de certificats d'autosignature qui font partie de la création de votre pile.,,, Merci Brad.

2 votes

CN=www.example.com a probablement tort. Les noms d'hôtes vont toujours dans la section SAN . Si elle est présente dans le CN alors il doit être présent dans le SAN également (vous devez l'énumérer deux fois dans ce cas). Pour plus de règles et de raisons, voir Comment signer une demande de signature de certificat avec votre autorité de certification ? et Comment créer un certificat auto-signé avec openssl ? Vous devrez également placer le certificat auto-signé dans le magasin de confiance approprié.

0 votes

@jww - il ne s'agit pas d'une duplication de cette question, car vous n'êtes pas obligé de créer un certificat en utilisant openssl, vous pouvez le créer avec d'autres outils.

116voto

Brad Parks Points 5513

Pour résoudre ce problème, vous devez fournir un paramètre supplémentaire à l'option openssl lorsque vous créez le certificat, en gros.

-sha256 -extfile v3.ext

v3.ext est un fichier comme celui-ci, avec %%DOMAIN%% remplacé par le même nom que celui que vous utilisez pour votre Common Name . Plus d'informations ici et par ici . Notez qu'en général, vous définissez l'option Common Name et %%DOMAIN%% au domaine pour lequel vous essayez de générer un certificat. Donc, si c'était www.mysupersite.com alors vous l'utiliserez pour les deux.

v3.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = %%DOMAIN%%

Remarque : les scripts qui traitent de cette question, et créer des certitudes ssl entièrement fiables à utiliser dans Chrome, Safari et à partir de clients Java peut être trouvé ici

Une autre note : Si tout ce que vous essayez de faire est d'empêcher chrome de lancer des erreurs lors de l'affichage d'un certificat auto-signé, vous pouvez indiquer à Chrome d'ignorer toutes les erreurs SSL pour TOUS les sites en le démarrant avec une option de ligne de commande spéciale, comme détaillé ici sur SuperUser

3 votes

Je ne sais pas quelle version de XAMPP vous utilisez, mais si vous cherchez une ligne dans ce fichier qui contient "openssl x509", vous devriez pouvoir ajouter ce qui précède à la fin de cette ligne dans le fichier. Par exemple, cette version de makecert.bat l'a sur la ligne 9, et finira par être : bin\openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365 -sha256 -extfile v3.ext . Bien sûr, vous devez toujours enregistrer le v3.ext vers un fichier dans le même dossier.

0 votes

Merci, ça a marché ! Cependant, comme écrit dans une réponse ci-dessous, j'obtiens toujours "NET::ERR_CERT_AUTHORITY_INVALID". J'ai ajouté le certificat comme certificat racine de confiance comme d'habitude avant mais cela n'a pas fonctionné. Cependant, le problème "Subject Alternative Name Missing" est résolu...

0 votes

@Tarik - Je ne peux pas vous dire avec certitude car je ne suis pas sous Windows, mais essayez d'utiliser le processus détaillé ici pour importer le fichier privkey.pem qui, je pense, est dans votre xampp/apache dossier. Cela pourrait résoudre votre problème d'autorité.

45voto

pandit Points 1454

La solution suivante a fonctionné pour moi sur chrome 65 ( réf. ) -

Créer un fichier de configuration OpenSSL (exemple : req.cnf)

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.com
DNS.2 = company.com
DNS.3 = company.net

Créer le certificat en faisant référence à ce fichier de configuration

openssl req -x509 -nodes -days 730 -newkey rsa:2048 \
 -keyout cert.key -out cert.pem -config req.cnf -sha256

2 votes

C'est génial ! Exactement ce dont j'avais besoin, et il évite les demandes ennuyeuses pour des choses comme le nom de la société et l'état et ainsi de suite.

2 votes

J'ai essayé plusieurs solutions alternatives, mais celle-ci est la seule qui ait fonctionné pour moi. Merci !

1 votes

Vous pouvez passer le sujet depuis une ligne de commande : openssl req ... -subj "/C=US/ST=VA/L=SomeCity/O=MyCompany/CN=www.company.com"

28voto

Logan Points 337

La question

Comme d'autres l'ont mentionné, le NET::ERR_CERT_COMMON_NAME_INVALID L'erreur se produit parce que le certificat généré n'inclut pas le SAN ( subjectAltName ).

RFC2818 a déprécié le fait de se rabattre sur le commonName depuis mai 2000. L'utilisation de la subjectAltName est appliqué dans Chrome depuis la version 58. _(voir Dépréciations de Chrome 58 )_ .

OpenSSL accepte Fichiers de configuration x509v3 pour ajouter des configurations étendues aux certificats _(voir le subjectAltName pour les options de configuration)_ .


Bash script

J'ai créé un self-signed-tls bash script avec des options simples pour faciliter la génération d'autorités de certification et la signature de certificats x509 avec OpenSSL (valable dans Chrome en utilisant l'option subjectAltName champ) .

Le script vous guidera à travers une série de questions pour inclure les informations nécessaires (y compris le subjectAltName champ) . Vous pouvez faire référence à la README.md pour plus de détails et d'options d'automatisation.

Veillez à redémarrer Chrome après avoir installé de nouveaux certificats.

chrome://restart

Autres ressources

  • La documentation de Docker contient une un excellent exemple simple et direct pour créer une autorité de certification auto-signée et signer des certificats avec OpenSSL.
  • cfssl est également un outil très robuste, largement utilisé et qui vaut la peine d'être consulté.

2 votes

Vous devriez ajouter le script ici et l'expliquer.

1 votes

Ça semble être un bon script. Mais un script ne fournit pas (directement) une vraie réponse quant au problème du PO. Expliquez peut-être aussi quel est son problème.

4voto

Ludwig Points 551

J'utilise simplement le -subj paramètre ajoutant l'adresse IP de la machine. Donc résolu avec une seule commande.

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -sha256 -subj '/CN=my-domain.com/subjectAltName=DNS.1=192.168.0.222/' -keyout my-domain.key -out my-domain.crt

Vous pouvez ajouter d'autres attributs comme C, ST, L, O, OU, emailAddress pour générer des certificats sans y être invité.

3 votes

Ne fonctionne pas. Il semble que chrome ne reconnaisse pas SAN de cette façon

0 votes

J'ai obtenu "problems making Certificate Request" sur OpenSSL 1.1.0b en utilisant cette commande.

0 votes

Pour moi (Windows) a travaillé une syntaxe légèrement différente : openssl.exe req -x509 -sha256 -newkey rsa:2048 -keyout certificate.key -out certificate.crt -days 365 -nodes -subj "/CN=my.domain.com" -addext "subjectAltName=DNS:my.domain.com" IIS doit alors *.pfx format : openssl.exe pkcs12 -export -out certificate.pfx -inkey certificate.key -in certificate.crt

1voto

Jun See Points 1

J'ai pu me débarrasser de (net::ERR_CERT_AUTHORITY_INVALID) en modifiant la valeur DNS.1 du fichier v3.ext

[alt_names] DNS.1 = nom de domaine.com

Remplacez domainname.com par votre propre domaine.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X