La bonne façon d'implémenter SSL sur localhost

10

Quelqu'un pourrait-il suggérer une manière moderne de générer des certificats auto-signés à implémenter sur localhost, qui seraient acceptés par Chrome et Mozilla?

J'ai essayé la génération openssl, mais Mozilla se plaint que l'émetteur n'est pas fiable.

Centos 7, nginx

Tarlan Mammadzada
la source
Utilisez Let's Encrypt .
Thomas
2
C'est un domaine local, nous allons chiffrer les œuvres uniquement sur les inscrits
Tarlan Mammadzada
2
Accédez au site, cliquez sur Avancé, puis sur Ajouter une exception.
Richard Smith
1
Vous voulez qu'il apparaisse sécurisé, vous aurez besoin d'une autorité de certification auto-signée et l'utiliser pour signer le certificat de votre serveur, puis vous pouvez ajouter l'autorité de certification au magasin de confiance du navigateur.
Richard Smith
1
Il semble que Firefox ait cessé d'accepter les certificats auto-signés. Comme le dit @RichardSmith, vous devrez utiliser une autorité de certification pour générer vos certificats. Avant de plonger dans ce champ de mines, vous devrez peut-être étudier les implications en matière de sécurité de l'exploitation de votre propre autorité.
garethTheRed

Réponses:

9

Avertissement: Avant de plonger dans le champ de mines de la gestion de votre propre autorité de certification, vous devrez peut-être étudier les implications en matière de sécurité!

Mais si vous devez, lisez la suite pour une CA rapide et sale qui vous donnera https://localhost/sans message d'avertissement ...

Créez le fichier texte suivant:

# OpenSSL configuration for Root CA

[ req ]

prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_distinguished_name
x509_extensions    = x509_ext

[ req_distinguished_name ]

# Note that the following are in 'reverse order' to what you'd expect to see.

countryName = gb
organizationName = Test
commonName = Test Root CA

[ x509_ext ]

basicConstraints=critical,CA:true,pathlen:0
keyUsage=critical,keyCertSign,cRLSign

Enregistrez sous root.cnfpuis générez la demande avec:

$ openssl req -x509 -new -keyout root.key -out root.cer -config root.cnf

Cela créera votre certificat racine CA ( root.cer) et votre clé privée racine CA ( root.key) que vous devez garder privée. Il vous demandera un mot de passe pour la clé privée - assurez-vous d'en choisir un fort.

Créez maintenant un fichier de configuration pour le certificat de serveur:

# OpenSSL configuration for end-entity cert

[ req ]

prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_distinguished_name

x509_extensions    = x509_ext

[ req_distinguished_name ]

# Note that the following are in 'reverse order' to what you'd expect to see.

countryName = gb
organizationName = Test
commonName = localhost

[ x509_ext ]

keyUsage=critical,digitalSignature,keyAgreement

subjectAltName = @alt_names

# Multiple Alternate Names are possible
[alt_names]
DNS.1 = localhost
# DNS.2 = altName.example.com

Enregistrez-le sous server.cnfet générez la demande avec:

openssl req -nodes -new -keyout server.key -out server.csr -config server.cnf

Ce qui précède va générer une autre clé privée ( server.key) que vous devez protéger. Dans ce cas, la clé n'est pas protégée par mot de passe, mais vous pouvez ajouter un mot de passe en supprimant l' -nodesoption.

Enfin, signez la demande avec votre nouvelle autorité de certification racine et les extensions du server.cnffichier (pour plus de commodité):

$ openssl x509 -req -in server.csr -CA root.cer -CAkey root.key -set_serial 123 -out server.cer -extfile server.cnf -extensions x509_ext

Remarque: choisissez un nombre aléatoire pour l' -set_serialoption.

Il vous demandera le mot de passe que vous avez entré lorsque vous avez généré l'autorité de certification racine.

Un certificat de serveur ( server.cer) sera généré.

Maintenant, ajoutez le certificat de l'autorité de certification racine ( root.cer) au magasin d'ancrage de confiance de Firefox et exécutez un test avec:

$ sudo openssl s_server -key server.key -cert server.cer -accept 443 -www

Remarque: vous pouvez obtenir des erreurs si un serveur est déjà en cours d'exécution sur le port 443. Dans ce cas, arrêtez le serveur en cours d'exécution ou remplacez le numéro de port ci-dessus par un autre port inutilisé.

Lorsque vous naviguez vers https://localhost(ou https://localhost:<port>si vous avez modifié le numéro de port ci-dessus) avec Firefox, vous ne devriez maintenant voir aucun avertissement et vous présenter une liste de chiffres que votre installation d'OpenSSL peut offrir.

Une fois que vous êtes satisfait des résultats, ajoutez le server.keyet server.cerà votre serveur Web et configurez-le en conséquence.

garethTheRed
la source
1
Il y a une faute de frappe; stinguished_namedevrait êtredistinguished_name
user281357