À partir de Chrome 58, il n'accepte plus les certificats auto-signés qui s'appuient sur Common Name
: https://productforums.google.com/forum/#!topic/chrome/zVo3M8CgKzQ;context-place=topicsearchin/chrome/category $ 3ACanary% 7Canalyse: pertinence% 7spell: false
Au lieu de cela, il faut utiliser Subject Alt Name
. Je suivais auparavant ce guide sur la façon de générer un certificat auto-signé: https://devcenter.heroku.com/articles/ssl-certificate-self, qui fonctionnait très bien car j'avais besoin des fichiers server.crt
et server.key
pour ce que je faisais. Je dois maintenant générer de nouveaux certs qui incluent, SAN
cependant, toutes mes tentatives pour le faire n’ont pas fonctionné avec Chrome 58.
Voici ce que j'ai fait:
J'ai suivi les étapes de l'article de Heroku mentionné ci-dessus pour générer la clé. J'ai alors écrit un nouveau fichier de configuration OpenSSL:
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = san
extensions = san
[ req_distinguished_name ]
countryName = US
stateOrProvinceName = Massachusetts
localityName = Boston
organizationName = MyCompany
[ san ]
subjectAltName = DNS:dev.mycompany.com
Puis généré le server.crt
avec la commande suivante:
openssl req \
-new \
-key server.key \
-out server.csr \
-config config.cnf \
-sha256 \
-days 3650
Je suis sur un Mac, alors j'ai ouvert le server.crt
fichier avec Keychain, je l'ai ajouté à mes certificats système. Je l'ai ensuite réglé sur Always Trust
.
À l'exception du fichier de configuration permettant de définir la valeur SAN, ces étapes étaient les mêmes que celles utilisées dans les versions précédentes de Chrome pour générer et faire confiance au certificat auto-signé.
Cependant, je reçois toujours le ERR_CERT_COMMON_NAME_INVALID
dans Chrome 58 après cela .
la source
-config <(cat /System/Library/OpenSSL/openssl.cnf ; printf '[SAN]\nsubjectAltName=DNS:dev.mycompany.com')
dev.company.name
pourlocalhost
et cela a fonctionné pour servir le site de développement local de localhost. Sur macOS, je devais également ajouter le certificat à Keychain et définir SSL sur "Toujours faire confiance".Sous Windows, enregistrez ce script dans votre dossier SSL sous le nom makeCERT.bat. Il créera les fichiers suivants: exemple.cnf, exemple.crt, exemple.key
la source
Voici une solution qui fonctionne pour moi:
Créer une clé de certification et un certificat
Créer serveur_rootCA.csr.cnf
Créer un fichier de configuration v3.ext
Créer une clé de serveur
Créer un certificat de serveur
Ajouter un certificat et une clé dans la section HTTPS (port 443) du fichier de site Apache2
Copiez server_rootCA.pem du serveur sur votre ordinateur.
.. et l'ajouter au navigateur Chromium
VOUS ÊTES TOUT FAIT!
PS Au lieu de créer une paire de certificats d’autorité de certification de serveur et de serveur (selon les instructions ci-dessus), vous pouvez simplement désactiver les en-têtes HSTS dans la configuration de votre serveur HTTP. Cela empêchera Chromium d'appliquer HTTPS et permettra aux utilisateurs de cliquer sur «Avancé → passer à votre fichier .url (non sécurisé)» sans avoir à obtenir et installer votre certificat CA personnalisé (racine_serveur). En d'autres termes, le fait de désactiver HSTS permettra à votre site d'être affiché publiquement via HTTP et / ou une connexion HTTPS non sécurisée (méfiez-vous!).
Pour Apache2, ajoutez ce qui suit au fichier de site, section HTTP (port 80)
Testé sur Debian / Apache2.4 + Debian / Chromium 59
https://ram.k0a1a.net/self-signed_https_cert_after_chrome_58
la source
-config <( cat server_rootCA.csr.cnf )
lieu de simplement-config server_rootCA.csr.cnf
?Il y a plusieurs bonnes réponses qui donnent des exemples sur la façon de faire fonctionner cela, mais aucune qui n'explique où les choses se sont mal passées lors de votre tentative. OpenSSL peut être assez non intuitif à certains moments, il vaut donc la peine de s'y intéresser.
Tout d’abord, OpenSSL ignore, par défaut, les valeurs de nom distinctif fournies dans la configuration. Si vous voulez les utiliser, vous devez ajouter
prompt = no
à votre configuration. De plus, la commande telle qu’elle est écrite ne génère qu’une demande de certificat, pas un certificat lui-même; elle-days
ne fait donc rien.Si vous générez votre demande de certificat à l'aide de la commande que vous avez donnée et inspectez le résultat, le nom d'objet alternatif est présent:
Mais ensuite, si vous générez le certificat à l'aide de la commande heroku link et examinez le résultat, le nom alt du sujet est manquant:
La raison en est que par défaut, OpenSSL ne copie pas les extensions de la demande vers le certificat. Normalement, le certificat serait créé / signé par une autorité de certification à la demande d'un client, et certaines extensions pourraient accorder au certificat plus de puissance que l'intention de l'autorité de certification si elles devaient faire confiance aux extensions définies dans la demande.
Il existe des moyens de demander à OpenSSL de copier les extensions, mais à mon humble avis, cela représente plus de travail que de simplement fournir les extensions dans un fichier de configuration lorsque vous générez le certificat.
Si vous essayez d'utiliser votre fichier de configuration existant, cela ne fonctionnera pas car la section de niveau supérieur est marquée de
[req]
sorte que ces paramètres s'appliquent uniquement à la commande req et non à la commande x509. Il n'est pas nécessaire d'avoir un marqueur de section de niveau supérieur, vous pouvez donc simplement supprimer cette première ligne, et cela fonctionnera correctement pour la génération de requêtes ou le certificat.Vous pouvez également utiliser l'
-x509
argument de lareq
commande pour générer un certificat auto-signé en une seule commande, plutôt que de créer d'abord une demande, puis un certificat. Dans ce cas, il n'est pas nécessaire de supprimer la[req]
ligne de section car cette section est lue et utilisée par la commande req.Pour récapituler, voici le fichier de configuration modifié utilisé dans les commandes ci-dessus:
la source
Ma solution est de garder le principal
openssl.cnf
comme il est et juste à la fin pour ajouter une nouvelle section comme[ cert_www.example.com ]
où www.example.com est le site pour lequel je veux créer un certificat, et en elle, a mis lesubjectAltName
je aurais besoin (et rien d'autre). Bien sûr, la section peut être nommée comme vous le souhaitez.Après cela, je peux exécuter la
openssl req
commande comme avant, en ajoutant simplement-extensions cert_www.example.com
pour que son contenu soit repris et-subj
en ajoutant directement toutes les informations de DN.N'oubliez pas de vérifier le contenu du certificat après sa création et avant son utilisation, avec
openssl x509 -text
la source
Script Bash avec config cuit dedans
En tant que script shell qui devrait fonctionner sur toutes les plateformes avec bash. Suppose que l’
HOSTNAME
environnement défini pour le shell ou fournisse un nom d’hôte de votre choix, par exemple:self_signed_cert.sh test
Ce qui précède injecte plus ou moins le minimum de configuration dont le fichier d’information a besoin.
Note, inclus en
DNS:localhost
tant que SAN pour permettre le test via localhost plus facilement. Supprimez ce bit supplémentaire du script si vous ne le souhaitez pas.Crédit
La réponse de bcardarella est excellente ( je ne peux pas commenter / voter en raison d'un représentant insuffisant). Cependant, la réponse utilise un emplacement de fichier de configuration openssl existant qui est spécifique à la plate-forme ... par conséquent:
De toute évidence, il vous suffira simplement de trouver le fichier de configuration openssl pour votre propre plate-forme et de remplacer l'emplacement correct.
Tester
Pour tester, importez
test.cert.pem
dans les autorités de chrome danschrome://settings/certificates
et:Et après avoir testé
la source