it-swarm.com.de

Selbstsigniertes SSL-Zertifikat für localhost

Ich habe eine Owin Self-Host C # -Anwendung, die Web-API-Dienste über 127.0.0.1:5555 bereitstellt (sie lauscht nur auf localhost, keine externen Verbindungen).

Diese Web-API-Services werden mit Ajax aus einer AngularJS-App aufgerufen. Übrigens: Der Grund für die Owin-App ist, dass eine gewisse Interaktion mit der Hardware erforderlich ist, die in einem Browser nicht möglich ist. Die AngularJS-App ist auch für den internen Gebrauch bestimmt, sodass ich die Kontrolle über die verwendeten Browser habe.

Das oben Genannte funktioniert sehr gut über HTTP, aber die Angular JS-App muss SSL verwenden. Dies funktioniert nur, wenn die Owin-App auch SSL verwendet (andernfalls wird der Fehler "Gemischter Inhalt" angezeigt).

Ich habe ein offizielles Zertifikat für die AngularJS-App gekauft und verwende selbstsignierte Zertifikate für die lokalen Owin-Hosts.

Das Problem ist, dass ich "NET :: ERR_CERT_AUTHORITY_INVALID" (beim Testen von Chrome) und "net :: ERR_INSECURE_RESPONSE" von der AngularJS-App erhalte, wenn ich mit der Owin-Web-API spreche.

Folgendes habe ich in großen Zügen getan:

Ich habe eine CentOS-Box verwendet, um das Zertifikat für localhost zu generieren und es in das Format pkcs12/pfx zu exportieren. Ich habe auch ein CA-Zertifikat erstellt und auf die gleiche Weise exportiert.

Mit MMC habe ich das localhost-Zertifikat auf dem Windows 7-Computer, auf dem die Angular & Owin-App ausgeführt wird, in Zertifikate (Lokaler Computer)> Persönlich> Zertifikate importiert.

Ich habe das CA-Zertifikat auf dem Windows 7-Computer auch in Zertifikate (Lokaler Computer)> Vertrauenswürdige Stammzertifizierungsstellen> Zertifikate importiert

Auf dem localhost-Zertifikat steht "Issued to: localhost", Issued by: "ca.acme.com", "Sie haben einen privaten Schlüssel, der diesem Zertifikat entspricht", (unter "Certification Path") "This certificate is Ok"

Auf dem Zertifizierungsstellenzertifikat steht "Ausgestellt an: ca.acme.com", Ausgestellt von: "ca.acme.com", "Sie haben einen privaten Schlüssel, der diesem Zertifikat entspricht" (unter "Zertifizierungspfad"). "Dieses Zertifikat ist in Ordnung".

netsh http show sslcert

IP:port                 : 127.0.0.1:5555 
Certificate Hash        : 1234555555555555555555511155555555555555
Application ID          : {1234a123-1234-1234-1234-123412341234} 
Certificate Store Name  : (null) 
Verify Client Certificate Revocation    : Enabled
Verify Revocation Using Cached Client Certificate Only    : Disabled
Usage Check    : Enabled
Revocation Freshness Time : 0 
URL Retrieval Timeout   : 0 
Ctl Identifier          : (null) 
Ctl Store Name          : (null) 
DS Mapper Usage    : Disabled
Negotiate Client Certificate    : Disabled

Was vermisse ich? Wie kann ich Chrome usw. dazu bringen, dem SSL-Zertifikat für localhost zu vertrauen?

8
Lars335

Ich habe das zum Laufen gebracht (zumindest für meine aktuellen Bedürfnisse).

Ich habe das localhost-Zertifikat von "Zertifikate ( Lokaler Computer )> Persönlich> Zertifikate" in "Zertifikate ( Aktueller Benutzer )> Persönlich> Zertifikate" kopiert. Damit wurden das rote Kreuz von https in Chrome (und die Meldung "NET :: ERR_CERT_AUTHORITY_INVALID") sowie der Fehler "net :: ERR_INSECURE_RESPONSE" in AngularJS beseitigt.

Beachten Sie, dass sich das localhost-Zertifikat in meinem Fall sowohl im lokalen Computerspeicher als auch im aktuellen Benutzerspeicher befinden musste, da andernfalls der Befehl netsh zum Binden an Port 5555 (für die Owin-App) fehlschlagen würde:

netsh http add sslcert ipport=127.0.0.1:5555 certhash=1234555555555555555555511155555555555555 appid={1234a123-1234-1234-1234-123412341234}

SSL Certificate add failed, Error: 1312, A specified logon session does not exist. It may already have been terminated.

Es gibt immer noch kein schönes grünes Vorhängeschloss in Chrome (auf dem Vorhängeschloss befindet sich jetzt ein gelbes kleines Dreieck mit der Aufschrift "Die Identität dieser Website wurde von ca.acme.com überprüft, es liegen jedoch keine öffentlichen Prüfungsunterlagen vor") scheint die Web-API-Kommunikation nicht zu beeinträchtigen, daher sollte dies in Ordnung sein.

Wenn jemand einen einfachen Weg kennt, um alles grün und schön ohne Warnungen zu machen, bin ich immer noch interessiert, aber es ist nicht kritisch.

6
Lars335

Unter Linux musste ich apt-gt install libnss3-tools

Mit libnss3-tools erhalten Sie certutil

Nun der Schlüsselbefehl:

certutil -d sql:$HOME/.pki/nssdb -A -t "CP,CP," -n <your alias> -i <your crt-file to import>

Dies löst alle meine Probleme mit Chrome unter Raspberry/Linux

0
Mike Mitterer