Die richtige Art der Implementierung von SSL auf localhost

10

Könnte jemand eine moderne Methode zur Generierung selbstsignierter Zertifikate vorschlagen, die auf localhost implementiert werden sollen und von Chrome und Mozilla akzeptiert werden?

Ich habe die OpenSSL-Generation ausprobiert, aber Mozilla beschwert sich, dass der Emittent nicht vertrauenswürdig ist.

Centos 7, Nginx

Tarlan Mammadzada
quelle
Verwenden Sie Let's Encrypt .
Thomas
2
Es ist lokale Domain, Let's Encrypt funktioniert nur auf registrierten
Tarlan Mammadzada
2
Navigieren Sie zur Site, klicken Sie auf Erweitert und dann auf Ausnahme hinzufügen.
Richard Smith
1
Wenn es sicher erscheinen soll, benötigen Sie eine selbstsignierte Zertifizierungsstelle, mit der Sie das Zertifikat Ihres Servers signieren können. Anschließend können Sie die Zertifizierungsstelle zum Trust Store des Browsers hinzufügen.
Richard Smith
1
Es scheint, dass Firefox keine selbstsignierten Zertifikate mehr akzeptiert. Wie @RichardSmith sagt, müssen Sie eine Zertifizierungsstelle verwenden, um Ihre Zertifikate zu generieren. Bevor Sie in dieses Minenfeld eintauchen, müssen Sie möglicherweise die Sicherheitsauswirkungen des Betriebs Ihrer eigenen Behörde untersuchen.
GarethTheRed

Antworten:

9

Warnung: Bevor Sie in das Minenfeld der Führung Ihrer eigenen Zertifizierungsstelle eintauchen, müssen Sie möglicherweise die Auswirkungen auf die Sicherheit untersuchen!

Aber wenn Sie müssen, lesen Sie weiter für eine schnelle und schmutzige Zertifizierungsstelle, die Sie https://localhost/ohne Warnmeldung erhalten wird ...

Erstellen Sie die folgende Textdatei:

# 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

Speichern unter root.cnfund generieren Sie die Anfrage mit:

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

Dadurch werden Ihr Stammzertifizierungsstellenzertifikat ( root.cer) und Ihr privater Stammzertifizierungsstellenschlüssel ( root.key) erstellt, die Sie privat halten müssen. Sie werden aufgefordert, ein Kennwort für den privaten Schlüssel einzugeben. Stellen Sie sicher, dass Sie ein sicheres Kennwort auswählen.

Erstellen Sie nun eine Konfigurationsdatei für das Serverzertifikat:

# 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

Speichern Sie es als server.cnfund generieren Sie die Anfrage mit:

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

Das Obige generiert einen weiteren privaten Schlüssel ( server.key), den Sie schützen müssen. In diesem Fall ist der Schlüssel nicht kennwortgeschützt. Sie können jedoch ein Kennwort hinzufügen, indem Sie die -nodesOption entfernen .

Unterzeichnen Sie die Anfrage schließlich mit Ihrer neuen Stammzertifizierungsstelle und den Erweiterungen aus der server.cnfDatei ( der Einfachheit halber):

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

Hinweis: Wählen Sie eine beliebige Zufallszahl für die -set_serialOption.

Sie werden nach dem Kennwort gefragt, das Sie beim Generieren der Stammzertifizierungsstelle eingegeben haben.

Ein Serverzertifikat ( server.cer) wird generiert.

Fügen Sie nun das Zertifikat der Stammzertifizierungsstelle ( root.cer) zum Firefox-Speicher für Vertrauensanker hinzu und führen Sie einen Test aus mit:

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

Hinweis: Möglicherweise treten Fehler auf, wenn auf Port 443 bereits ein Server ausgeführt wird. In diesem Fall stoppen Sie entweder den laufenden Server oder ändern Sie die oben angegebene Portnummer in einen anderen nicht verwendeten Port.

Wenn Sie Naviate zu https://localhost(oder https://localhost:<port>wenn Sie die Portnummer oben geändert) mit Firefox, sollten Sie keine Warnung , jetzt und mit einer Liste von Chiffren Ihre Installation von OpenSSL anbieten kann präsentiert werden.

Wenn Sie mit den Ergebnissen zufrieden sind, fügen Sie das server.keyund server.cerzu Ihrem Webserver hinzu und konfigurieren Sie es entsprechend.

garethTheRed
quelle
1
Es gibt einen Tippfehler; stinguished_namesollte seindistinguished_name
user281357