Erstellen Sie ein vertrauenswürdiges selbstsigniertes SSL-Zertifikat für localhost (zur Verwendung mit Express / Node).

129

Beim Versuch, verschiedene Anweisungen zum Erstellen eines selbstsignierten Zertifikats für die Verwendung mit localhost zu befolgen, scheinen die meisten Anweisungen für IIS zu gelten, aber ich versuche, Nodejs / Express zu verwenden. Keiner von ihnen funktioniert ordnungsgemäß, da das Zertifikat zwar installiert wird, aber nicht vertrauenswürdig ist. Folgendes habe ich versucht, was fehlschlägt:

Kann jemand einen Workflow anbieten, der dies kann? Ich kann ein Zertifikat installieren lassen, aber ich kann nicht sicherstellen, dass das Zertifikat in Chrome (v32) oder IE (v10) vertrauenswürdig ist.

BEARBEITEN: In Kommentaren wurde vorgeschlagen, dass das Problem kein vertrauenswürdiger Zertifikatsstamm ist. Ich habe das Zertifikat über den IE installiert, aber es wird immer noch nicht als vertrauenswürdig eingestuft.

JasonS
quelle
Keines der selbstsignierten Zertifikate kann für Webbrowser als vertrauenswürdig eingestuft werden. Sie werden nicht von vertrauenswürdigen Signaturbehörden signiert.
1
Das stimmt nicht: Sie können ein Stammzertifikat installieren, um Ihr selbstsigniertes Zertifikat als vertrauenswürdig zu betrachten. Ich kann dies jedoch nicht richtig machen. Ich habe gelesen, dass Sie die Zertifizierungskette im IE installieren können (nicht in Chrome), also habe ich das versucht, aber es wird immer noch nicht erkannt. Ich weiß nicht, ob es daran liegt, dass localhost etwas Besonderes ist oder ob das selbstsignierte Zertifikat einfach nicht korrekt ist.
JasonS
3
Ich habe nie ein selbstsigniertes Zertifikat erhalten, das mit Browsern wie Chrome funktioniert. Hier ist meine Problemumgehung: Ich habe einen DNS-Eintrag für local.MYDOMAIN.com erstellt, der auf 127.0.0.1 (localhost) verweist, und dann einfach mein Produktionszertifikat verwendet. Dies hat den zusätzlichen Vorteil, dass sichergestellt wird, dass es keine Probleme mit Ihrer Produktionszertifikatskette usw. gibt
JasonS

Antworten:

84

Die obigen Antworten waren teilweise. Ich habe so viel Zeit damit verbracht, das zum Laufen zu bringen, es ist verrückt. Hinweis für mein zukünftiges Ich: Folgendes müssen Sie tun:

Ich arbeite unter Windows 10 mit Chrome 65. Firefox verhält sich gut - bestätigen Sie einfach localhost als Sicherheitsausnahme und es wird funktionieren. Chrome nicht:

Schritt 1. Erstellen Sie in Ihrem Backend einen Ordner mit dem Namen security. Wir werden darin arbeiten.

Schritt 2. Erstellen Sie eine Anforderungskonfigurationsdatei req.cnfmit dem folgenden Inhalt (Gutschrift geht an: @Anshul )

req.cnf:

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = Country initials like US, RO, GE
ST = State
L = Location
O = Organization Name
OU = Organizational Unit 
CN = www.localhost.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.localhost.com
DNS.2 = localhost.com
DNS.3 = localhost

Eine Erklärung dieser Felder finden Sie hier .

Schritt 3. Navigieren Sie zum Sicherheitsordner im Terminal und geben Sie den folgenden Befehl ein:

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

Schritt 4.security Führen Sie dann außerhalb des Ordners in Ihrer Express-App Folgendes aus: (Gutschrift geht an @Diego Mello)

backend 
 /security
 /server.js

server.js:

const express = require('express')
const app = express()
const https = require('https')
const fs = require('fs')
const port = 3000

app.get('/', (req, res) => {
    res.send("IT'S WORKING!")
})

const httpsOptions = {
    key: fs.readFileSync('./security/cert.key'),
    cert: fs.readFileSync('./security/cert.pem')
}
const server = https.createServer(httpsOptions, app)
    .listen(port, () => {
        console.log('server running at ' + port)
    })

Schritt 5. Starten Sie den Server node server.jsund gehen Sie zu https: // localhost: 3000 .

Zu diesem Zeitpunkt haben wir das Server-Setup. Der Browser sollte jedoch eine Warnmeldung anzeigen.

Wir müssen unser selbstsigniertes Zertifikat als vertrauenswürdige Zertifizierungsstelle für Zertifizierungsstellen im Chrome / Windows-Zertifikatspeicher registrieren. (Chrome speichert dies auch in Windows)

Schritt 6. Öffnen Sie Dev Tools in Chrome, gehen Sie zum Sicherheitsbereich und klicken Sie auf Zertifikat anzeigen. Geben Sie hier die Bildbeschreibung ein

Schritt 7. Gehen Sie zum Detailfenster, klicken Sie auf Datei kopieren und klicken Sie dann, wenn der Zertifikatsexport-Assistent angezeigt wird, wie folgt auf Weiter:

Gehen Sie zu Details - Datei kopieren - Weiter beim Export-Assistenten

Schritt 8. Verlassen Sie die DER-Codierung, klicken BrowseSie auf Weiter, wählen Sie , legen Sie sie in einem leicht zugänglichen Ordner wie Desktop ab und benennen Sie das Zertifikat localhost.cer, then click Save and then Finish.. Sie sollten Ihr Zertifikat auf dem Desktop sehen können.

Schritt 9. Öffnen Sie, chrome://settings/indem Sie es in das URL-Feld einfügen. Klicken Sie unten auf Advanced / Advanced Optionsund scrollen Sie nach unten, um zu suchen Manage Certificates.

Wählen Sie Zertifikate verwalten

Schritt 10. Wechseln Sie zum Bereich Vertrauenswürdige Stammzertifizierungsstellen, und klicken Sie auf Importieren.

Wechseln Sie zum Bereich Vertrauenswürdige Stammzertifizierungsstellen, und klicken Sie auf Importieren

Wir werden das localhost.cerZertifikat importieren, das wir gerade in Schritt 8 exportiert haben.

Schritt 11. Klicken Sie auf Durchsuchen, suchen Sie die localhost.cer, lassen Sie die Standardwerte einige Male auf Weiter klicken - bis diese Warnung angezeigt wird, klicken Sie auf Ja.

Sicherheitsausnahme bestätigen

Schritt 12. Schließen Sie alles und starten Sie Chrome neu. Wenn https://localhost:3000Sie dann zu gehen, sollten Sie sehen: Ich muss das Grün lieben

AIon
quelle
Hallo, wenn ich alle Schritte abgeschlossen habe, die ich öffne, https://localhost:3000bleibt Chrome beim Laden hängen. Jeder kann sagen, was der Grund sein könnte?
co.zohar
@ co.zohar eine Nachricht in der Konsole? Drücken Sie crl+shift+ioder F12, um die Konsole zu öffnen.
Am
1
Wenn Sie dies für eine Adresse in einem Netzwerk tun, habe ich festgestellt, dass das Einrichten des Zertifikats-DNS auf einen Hostnamen wie folgt erfolgt DNS.1 = server.local : Aktualisieren Sie dann auf dem Verbindungscomputer die HOSTS-Datei, um die Server-IP-Adresse auf den Hostnamen zu verweisen, zum Beispiel: 192.168.0.50 server.localDies wird Lassen Sie das Zertifikat und die Adresse übereinstimmen und validieren Sie das Zertifikat.
Roskelld
@AIon zeigt die Konsole nichts. Die Seite zeigt nur: "Warten auf localhost ...". Haben Sie etwas in der Hosts-Datei konfiguriert?
co.zohar
1
Ich habe eine Halbantwort auf meine eigene Frage gefunden: Wenn Sie CN und DNS.1 beispielsweise in "local.com" ändern und auf jedem Computer, der Zugriff auf den Server benötigt, die Datei etc / hosts in "local" ändern .com auf die IP des Servers, das funktioniert.
TKoL
109

Kürzester Weg. Getestet unter MacOS, funktioniert aber möglicherweise auch unter anderen Betriebssystemen.

Pem generieren

> openssl req -x509 -newkey rsa:2048 -keyout keytmp.pem -out cert.pem -days 365

> openssl rsa -in keytmp.pem -out key.pem

Ihr Express-Server

const express = require('express')
const app = express()
const https = require('https')
const fs = require('fs')
const port = 3000

app.get('/', (req, res) => {
  res.send('WORKING!')
})

const httpsOptions = {
  key: fs.readFileSync('./key.pem'),
  cert: fs.readFileSync('./cert.pem')
}
const server = https.createServer(httpsOptions, app).listen(port, () => {
  console.log('server running at ' + port)
})
  • Öffnen Sie https://localhost:3000in Google Chrome und Sie werden feststellen, dass es nicht sicher ist. Noch!
  • Unter Entwicklertools> Sicherheit> Zertifikat anzeigen: Ziehen Sie das Bild auf Ihren Desktop und doppelklicken Sie darauf.
  • Klicken Sie auf "Hinzufügen".
  • Suchen Sie es in Keychain Access und doppelklicken Sie darauf
  • Erweitern Sie "Vertrauen" und ändern Sie "Bei Verwendung dieses Zertifikats" in "Immer vertrauen".
  • Möglicherweise werden Sie zur Authentifizierung aufgefordert.
  • Starten Sie Ihren Server neu.
  • Aktualisieren Sie Ihren Browser.
  • Genießen! :) :)
Diego Mello
quelle
1
Hier ist ein weiterer Link, wenn Sie dies auf einem Mac tun möchten: certsimple.com/blog/localhost-ssl-fix .
John
Wunderschönen! Das hat funktioniert! Ich möchte hinzufügen : Installieren Sie OpenSSL von hier aus: indy.fulgan.com/SSL/?C=M;O=A . Holen Sie sich die .cnf-Datei von hier: und konfigurieren Sie sie dann von hier: gist.githubusercontent.com/pandurang90/dbe6a67339747ef5bacf/raw/… und konfigurieren Sie openSSL von hier aus: stackoverflow.com/questions/7360602/…
Jose A
2
Ich möchte hinzufügen, dass für Chrome 58+ die Fehlermeldung "Betreff alternativer Name fehlt" angezeigt wird. stackoverflow.com/a/42917227/1057052 . Überprüfen Sie die Antworten unten für weitere Hilfe: stackoverflow.com/a/43666288/1057052 , stackoverflow.com/a/44398368/1057052
Jose A
14
Drag image to your desktop and double click it-> Ich kann nichts auf meinen Desktop ziehen, ist nicht ziehbar. Was imageredest du genau über Erz?
Am
7
Um zu verhindern, dass "Alternativer Name des Betreffs fehlt" in Chrome, können Sie openssl req -newkey rsa:2048 -x509 -nodes -keyout keytmp.pem -new -out cert.pem -subj /CN=localhost -reqexts SAN -extensions SAN -config <(cat /System/Library/OpenSSL/openssl.cnf <(printf '[SAN]\nsubjectAltName=DNS:localhost')) -sha256 -days 3650anstelle der von Ihnen vorgeschlagenen ersten Zeile etwas tun . Und auch dieser wird dabei weniger Fragen stellen ...
Michael Litvin
78

Sie können openSSL ausprobieren, um Zertifikate zu generieren. Schauen Sie sich auf diese .

Sie benötigen eine .key- und eine .crt-Datei, um HTTPS zum Knoten-JS-Express-Server hinzuzufügen. Wenn Sie dies generiert haben, verwenden Sie diesen Code, um HTTPS zum Server hinzuzufügen.

var https = require('https');
var fs = require('fs');
var express = require('express');

var options = {
    key: fs.readFileSync('/etc/apache2/ssl/server.key'),
    cert: fs.readFileSync('/etc/apache2/ssl/server.crt'),
    requestCert: false,
    rejectUnauthorized: false
};


var app = express();

var server = https.createServer(options, app).listen(3000, function(){
    console.log("server started at port 3000");
});

Dies funktioniert sowohl auf meinem lokalen Computer als auch auf dem Server, auf dem ich dies bereitgestellt habe, einwandfrei. Der, den ich auf dem Server habe, wurde von goDaddy gekauft, aber localhost hatte ein selbstsigniertes Zertifikat.

Jeder Browser hat jedoch einen Fehler ausgegeben, der besagt, dass die Verbindung nicht vertrauenswürdig ist. Möchten Sie fortfahren? Nachdem ich auf Weiter geklickt habe, hat es gut funktioniert.

Wenn jemand diesen Fehler jemals mit einem selbstsignierten Zertifikat umgangen hat, klären Sie dies bitte auf.

Mars Robertson
quelle
9
Ihr Zertifikat ist immer noch nicht vertrauenswürdig, daher haben Sie das gleiche Problem, das ich beschreibe. Ich muss ihm vertrauen, um einen Webservice richtig testen / debuggen zu können.
JasonS
1
Sie möchten also, dass diesem Zertifikat nur auf Ihrem lokalen Computer und nicht im Netzwerk vertraut wird?
1
Der Link oben in der Antwort empfiehlt eine 1024-Bit-3DES-Verschlüsselung, die weit veraltet ist. Besser openssl genrsa -out key.pem 2048für einen besseren Schlüssel zu verwenden.
Steampowered
3
Ihr Zertifikat ist immer noch nicht vertrauenswürdig.
Diego Mello
2
Der obige Express-Code funktioniert unter Verwendung von github.com/FiloSottile/mkcert (anstelle von openSSL), um eine lokale Zertifizierungsstelle / ein vertrauenswürdiges Zertifikat zu erstellen. Grüne Balken den ganzen Weg.
Som
11

So generieren Sie ein SSL-Zertifikat für localhost: link

openssl genrsa -des3 -out server.key 1024

Hier müssen Sie ein Passwort eingeben , das Sie in den folgenden Schritten erneut eingeben müssen

openssl req -new -key server.key -out server.csr

Wenn Sie nach "Common Name" gefragt werden, geben Sie Folgendes ein : localhost

openssl x509 -req -days 1024 -in server.csr -signkey server.key -out server.crt
Fuma
quelle
1
Dies ist die Lösung, mit der ich in den letzten 2 Stunden das Internet durchsucht habe. Für alle in Ubuntu verschieben cp server.crt /usr/local/share/ca-certificates/.und ausführen sudo update-ca-certificatesDann laufen localhost https Anfragen unter NodeJS 8+. Id auch erhöhen1024 to 2048
Salyangoz
6

Hier ist, was für mich funktioniert

auf Windows

1) Fügen Sie dies zu Ihrer% WINDIR% \ System32 \ drivers \ etc \ hosts-Datei hinzu: 127.0.0.1 localdev.YOURSITE.net (weil der Browser Probleme mit 'localhost' hat (für Cross-Origin-Scripting)

Windows Vista und Windows 7 Vista und Windows 7 verwenden die Benutzerkontensteuerung (User Account Control, UAC), sodass Notepad als Administrator ausgeführt werden muss.

  1. Klicken Sie auf Start -> Alle Programme -> Zubehör

  2. Klicken Sie mit der rechten Maustaste auf Editor und wählen Sie Als Administrator ausführen

  3. Klicken Sie im UAC-Fenster "Windows benötigt Ihre Berechtigung" auf "Weiter".

  4. Wenn der Editor geöffnet wird Klicken Sie auf Datei -> Öffnen

  5. Geben Sie im Feld Dateiname C: \ Windows \ System32 \ Drivers \ etc \ hosts ein

  6. Klicken Sie auf Öffnen

  7. Fügen Sie dies Ihrer% WINDIR% \ System32 \ drivers \ etc \ hosts-Datei hinzu: 127.0.0.1 localdev.YOURSITE.net

  8. sparen

  9. Schließen Sie die Browser und starten Sie sie neu

Auf Mac oder Linux:

  1. Öffnen Sie / etc / hosts mit suErlaubnis
  2. Hinzufügen 127.0.0.1 localdev.YOURSITE.net
  3. Speichern Sie es

Bei der Entwicklung verwenden Sie localdev.YOURSITE.net anstelle von localhost. Wenn Sie also in Ihrem ide Run / Debug-Konfigurationen verwenden, müssen Sie diese unbedingt aktualisieren.

Verwenden Sie ".YOURSITE.net" als Cookiedomain (mit einem Punkt am Anfang), wenn Sie das Cookiem erstellen. Dann sollte es mit allen Subdomains funktionieren.

2) Erstellen Sie das Zertifikat mit dieser localdev.url

TIPP: Wenn Sie Probleme beim Generieren von Zertifikaten unter Windows haben, verwenden Sie stattdessen eine VirtualBox- oder VMware-Maschine.

3) Importieren Sie das Zertifikat wie unter http://www.charlesproxy.com/documentation/using-charles/ssl-certificates/ beschrieben.

TroyWorks
quelle
Hallo Troy, danke, dass du das geteilt hast. Jemand anderes muss kommentieren, ob dies funktioniert oder nicht. Meine Problemumgehung: Am Ende habe ich dev.phantomjscloud.com zu meiner Hosts-Datei hinzugefügt und dann mein Produktionszertifikat verwendet. Das ist nur dann nützlich, wenn Sie möchten, dass Ihre Produktionsschlüssel auf Ihrer Entwicklungsbox verfügbar sind. Ich denke, Ihre Lösung könnte noch gültig sein, wenn jemand anderes dies überprüfen kann
JasonS
Es funktioniert für mich und mein Team auf verschiedene Weise, indem es lokal auf lokal Server schützt, um lokal auf Produktionsserver zu sichern.
TroyWorks
Unter Windows funktioniert die Git-Bash-Konsole hervorragend mit den von hier aus geöffneten openssl-Befehlen . Sie müssen nur das Stammzertifikat installieren und können bei Bedarf mehrere von ihm signierte standortspezifische Zertifikate erstellen.
Jason Goemaat
6

Mkcert von @FiloSottile vereinfacht diesen Vorgang unendlich:

  1. Installieren Sie mkcert , es gibt Anweisungen für macOS / Windows / Linux
  2. mkcert -install um eine lokale Zertifizierungsstelle zu erstellen
  3. mkcert localhost 127.0.0.1 ::1 um ein vertrauenswürdiges Zertifikat für localhost im aktuellen Verzeichnis zu erstellen
  4. Sie verwenden einen Knoten (der den Systemstammspeicher nicht verwendet), daher müssen Sie die Zertifizierungsstelle explizit in einer Umgebungsvariablen angeben , z.export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"
  5. Führen Sie schließlich Ihren Express-Server mit dem in verschiedenen anderen Antworten beschriebenen Setup aus (z. B. unten).
  6. Boom. localhost schwimmt in grün.

Grundlegende Knoteneinrichtung:

const https = require('https');
const fs = require('fs');
const express = require('express');

const app = express();    
const server = https.createServer({
    key: fs.readFileSync('/XXX/localhost+2-key.pem'), // where's me key?
    cert: fs.readFileSync('/XXX/localhost+2.pem'), // where's me cert?
    requestCert: false,
    rejectUnauthorized: false,
}, app).listen(10443); // get creative
so M
quelle
Funktioniert super! Bei diesem Ansatz müssen wir unser selbstsigniertes Zertifikat nicht als vertrauenswürdige Zertifizierungsstelle für Zertifizierungsstellen im Chrome / Windows-Zertifikatspeicher registrieren. Wie in anderen Antworten erwähnt.
Zaheer
4

Wenn Sie unter OSX / Chrome arbeiten, können Sie das selbstsignierte SSL-Zertifikat wie hier beschrieben zu Ihrem Systemschlüsselbund hinzufügen: http://www.robpeck.com/2010/10/google-chrome-mac-os-x-and -selbst signierte-ssl-Zertifikate

Es ist ein manueller Prozess, aber ich habe ihn endlich zum Laufen gebracht. Stellen Sie einfach sicher, dass der Common Name (CN) auf "localhost" (ohne Port) eingestellt ist, und stellen Sie nach dem Hinzufügen des Zertifikats sicher, dass alle Vertrauensoptionen des Zertifikats auf "Always Trust" eingestellt sind. Stellen Sie außerdem sicher, dass Sie es dem Schlüsselbund "System" und nicht dem Schlüsselbund "Login" hinzufügen.

Vijay Rudraraju
quelle
Er erwähnt IE, was bedeutet, dass er Windows verwendet.
2-Bit
3

Wenn Sie Node verwenden, können Sie diese mit Node generieren. Dieses Modul scheint ziemlich voll ausgestattet zu sein:

Beachten Sie, dass ich nicht im laufenden Betrieb generieren würde. Generieren Sie mit einer Art Build-Skript, damit Sie ein konsistentes Zertifikat und einen konsistenten Schlüssel haben. Andernfalls müssen Sie das neu generierte selbstsignierte Zertifikat jedes Mal autorisieren.

BT
quelle
3

Einige der Antworten enthalten Beiträge, die für mich sehr nützlich waren, um auch dieses Problem zu lösen. Ich war jedoch auch an der Mindestanzahl von Schritten und im Idealfall an der Vermeidung von OpenSSL (unter Windows 10) interessiert .

Ein wichtiger Punkt bei den Antworten (Kredit: @ TroyWorks ) ist, dass Sie Ihre HOSTS-Datei bearbeiten müssen, um einen fiktiven Server zu erstellen, und diese 127.0.0.1 zuordnen müssen. Dies setzt voraus, dass Sie die lokale Entwicklung durchführen.

In meinem Fall habe ich das SS-Zertifikat verwendet, um einen Websocket in NodeJS zu sichern, und dieser Socket wurde programmgesteuert verbunden (im Gegensatz zum Browser). Daher war es für mich wichtig, dass das Zertifikat ohne Warnungen oder Fehler akzeptiert wurde, und das entscheidende Element war, dass das Zertifikat mit einem geeigneten CN erstellt wurde (und das Zertifikat natürlich bei vertrauenswürdigen Behörden zu akzeptieren, wie an anderer Stelle in den Antworten beschrieben). . Wenn Sie IIS zum Erstellen eines selbstsignierten Zertifikats verwenden, wird nicht der richtige CN erstellt. Daher habe ich den folgenden einfachen Befehl mit Powershell entdeckt:

New-SelfSignedCertificate -DnsName "gandalf.dummy.dev" -FriendlyName "gandalf" -CertStoreLocation "cert:\LocalMachine\My"

Dies muss in der PS Admin-Konsole ausgeführt werden, funktioniert jedoch einfach und fügt das Zertifikat in den Abschnitt "Persönlich" des LocalMachine-Zertifikatspeichers ein. Sie können überprüfen, ob es erstellt wurde, indem Sie Folgendes ausführen:

ls cert:\LocalMachine\My 

Um ihm zu vertrauen, kopieren Sie ihn einfach und fügen Sie ihn mit Certificate Manager in "Trusted Root Certification Authorities" ein (stellen Sie sicher, dass Sie sich die Zertifikate des lokalen Computers ansehen, nicht den aktuellen Benutzer!).

Wenn Sie sich in IIS an dieses Zertifikat binden, sollten Sie in der Lage sein, auf https://gandalf.dummy.dev/ zu klicken und eine sichere Verbindung ohne Warnungen herzustellen.

Das letzte Stück, das dies in NodeJS verwendet, ist oben und in anderen SO-Antworten beschrieben. Daher möchte ich nur hinzufügen, dass es unter Windows einfacher ist, mit einer pfx-Datei zu arbeiten, die das Zertifikat und den privaten Schlüssel kombiniert. Sie können einen Pfx problemlos aus dem Zertifikat-Manager exportieren, dies hat jedoch Auswirkungen auf die Verwendung in NodeJS. Wenn Sie einen Server mithilfe des Moduls 'https' instanziieren, verwenden Sie (anstelle von 'key' und 'cert') die Optionen 'pfx' und 'passphrase', wie in:

var https = require('https');
var options = { 
    pfx: fs.readFileSync('mypfxfile'), 
    passphrase: 'foo' 
};
var server = https.createServer(options);
Tomo
quelle
2

Unter Windows habe ich das iis-Entwicklungszertifikat mithilfe von MMC (start> run> mmc) als vertrauenswürdig eingestuft, dann das Zertifikat-Snapin hinzugefügt, "lokaler Computer" ausgewählt und die Standardeinstellungen übernommen. Wenn dieser Zertifikat-Snapip hinzugefügt wurde, erweitern Sie die Zertifikatstruktur des lokalen Computers, um unter Persönlich zu suchen. Wählen Sie das lokale Host-Zertifikat aus und klicken Sie mit der rechten Maustaste auf> Alle Aufgaben> Exportieren. Übernehmen Sie alle Standardeinstellungen im Exportassistenten.

Erweitern Sie nach dem Speichern dieser Datei vertrauenswürdige Zertifikate und beginnen Sie mit dem Import des gerade exportierten Zertifikats. https://localhostwird jetzt in Chrom ohne Sicherheitswarnungen vertraut.

Ich habe diese Leitfadenauflösung Nr. 2 aus dem MSDN-Blog verwendet. Der Op hat auch einen Link in seiner Frage dazu geteilt, dass auch MMC verwendet werden sollte, aber das hat bei mir funktioniert. Auflösung # 2

Mushcraft
quelle
2

Gehe zu: chrome://flags/

Aktivieren: Zulassen ungültiger Zertifikate für Ressourcen, die von localhost geladen wurden.

Sie haben nicht die grüne Sicherheit, aber Sie dürfen immer https: // localhost in Chrome verwenden.

Alphapage
quelle
2

Das hat noch mehr Aspekte.

Sie können TLS (manche sagen immer SSL) mit einem Zertifikat erreichen, das selbst signiert ist oder nicht.

Um einen grünen Balken für ein selbstsigniertes Zertifikat zu erhalten, müssen Sie auch die Zertifizierungsstelle (CA) werden. Dieser Aspekt fehlt in den meisten Ressourcen, die ich auf meiner Reise gefunden habe, um den grünen Balken in meinem lokalen Entwicklungssetup zu erreichen. Eine Zertifizierungsstelle zu werden ist so einfach wie ein Zertifikat zu erstellen.

Diese Ressource umfasst die Erstellung sowohl des CA-Zertifikats als auch eines Serverzertifikats. Mein Setup führte dazu, dass auf localhost Chrome, Firefox und Edge ein grüner Balken angezeigt wurde: https://ram.k0a1a.net/self-signed_https_cert_after_chrome_58

Bitte beachten Sie: In Chrome müssen Sie das CA-Zertifikat Ihren vertrauenswürdigen Behörden hinzufügen.

Jos
quelle
0

Wenn Sie einen Schritt weiter gehen müssen als die detaillierten Schritte von @ alon, und auch eine selbstsignierte ca erstellen müssen:

https.createServer({
  key: fs.readFileSync(NODE_SSL_KEY),
  cert: fs.readFileSync(NODE_SSL_CERT),
  ca: fs.readFileSync(NODE_SSL_CA),
}, app).listen(PORT, () => {});

package.json

"setup:https": "openssl genrsa -out src/server/ssl/localhost.key 2048
&& openssl req -new -x509 -key src/server/ssl/localhost.key -out src/server/ssl/localhost.crt -config src/server/ssl/localhost.cnf
&& openssl req -new -out src/server/ssl/localhost.csr -config src/server/ssl/localhost.cnf
&& openssl x509 -req -in src/server/ssl/localhost.csr -CA src/server/ssl/localhost.crt -CAkey src/server/ssl/localhost.key -CAcreateserial -out src/server/ssl/ca.crt",

Verwenden Sie die Datei localhost.cnf wie beschrieben:

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = UK
ST = State
L = Location
O = Organization Name
OU = Organizational Unit 
CN = www.localhost.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.localhost.com
DNS.2 = localhost.com
DNS.3 = localhost
Mummybot
quelle