2014-12-22 5 views
7

Ich habe eine Owin-Self-Host-C# -App, die Web-API-Dienste über 127.0.0.1:5555 bereitstellt (sie überwacht nur localhost, keine externen Verbindungen).Selbstsigniertes SSL-Zertifikat für localhost, wie man vertrauenswürdig macht

Diese Web-API-Dienste werden mit Ajax aus einer AngularJS-App aufgerufen. Nebenbei: Der Grund für die Owin-App ist, dass bestimmte Interaktion mit der Hardware benötigt wird, die nicht von einem Browser aus möglich ist. Außerdem ist die AngularJS-App für den internen Gebrauch, so dass ich die Kontrolle über die verwendeten Browser habe.

Die oben genannten Arbeiten sehr gut über HTTP, aber die Angular JS App benötigt SSL zu verwenden, die, wenn die App SSL verwendet auch Owin funktioniert nicht (sonst Sie „Mixed Content“ Fehler erhalten).

Ich habe ein offizielles Zertifikat für die AngularJS App gekauft, und ich benutze selbstsignierte Zertifikate für das Owin Localhost-Zeug.

Das Problem ist, dass ich "NET :: ERR_CERT_AUTHORITY_INVALID" (wenn testin von Chrome) und "net :: ERR_INSECURE_RESPONSE" aus der AngularJS App erhalten, wenn die API Owin Web sprechen. Hier

ist das, was ich getan habe, in groben Zügen:

Ich benutzte ein CentOS-Box das CERT für localhost zu generieren und exportiert sie/pfx Format pkcs12. Ich habe auch ein CA-Zertifikat erstellt und es auf die gleiche Weise exportiert.

Mit MMC ich die localhost cert auf der Windows-7-Maschine importiert, um den Winkel & Owin App in Zertifikate (Lokaler Computer) läuft> Personal> Zertifikate.

ich in Zertifikate (Lokaler Computer)> Vertrauenswürdige Stammzertifizierungs Auhorities> Zertifikate

Mit Blick auf dem lokalen Host-Zertifikat auch das CA-Zertifikat auf der 7-Maschine von Windows importiert, heißt es „erteilt an: localhost“, Herausgeber: "ca.acme.com", "Sie haben einen privaten Schlüssel, der diesem Zertifikat entspricht", (unter Zertifizierungspfad) "Dieses Zertifikat ist in Ordnung"

Das CA-Zertifikat sagt "Ausgestellt für: 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 fehlt mir? Wie kann ich Chrome usw. das SSL-Zertifikat für localhost vertrauen lassen?

+0

Wenn dies nur für Ihre eigenen Tests gilt: Rufen Sie eine HTTPS-URL auf, die dieses Zertifikat direkt verwendet, und fügen Sie eine Ausnahme in Ihrem Browser hinzu. Wenn Sie möchten, dass es überall in den Browsern von Benutzern im Web funktioniert, müssen Sie ein Zertifikat anfordern, das von einer vertrauenswürdigen Zertifizierungsstelle signiert wurde. – CBroe

+0

http://stackoverflow.com/questions/7580508/getting-chrome-to-accept-self-signed-localhost-certificate – epascarello

+0

@CBroe Es ist nicht zum Testen. Dies wird auch auf einer großen Anzahl von internen Computern verwendet werden; Könnte ich ein offizielles Zertifikat für localhost bekommen und es irgendwie auf allen verwenden? Da dies alles nur für den lokalen Host-Verkehr gilt (ohne sensible Daten), habe ich wirklich keine Sicherheitsbedenken. – Lars335

Antwort

5

Ich habe das funktioniert (ausreichend für meine aktuellen Bedürfnisse, zumindest).

kopiert ich die localhost cert von "Zertifikate (Lokaler Computer )> Personal> Zertifikate" auf "Zertifikate (Current User)> Persönlich> Zertifikate". Dadurch wurde 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 in meinem Fall die localhost cert für die Bindung es an Port 5555 (für die Owin App) fehlschlagen würde sowohl die lokalen Computerspeicher und in den aktuellen Benutzerspeichern, sonst wird der Befehl netsh sein mußte:

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 (es hat jetzt ein gelbes kleines Dreieck auf dem Pad-Schloss, "Die Identität dieser Website wurde von ca.acme verifiziert.com aber hat keine öffentlichen Audit-Aufzeichnungen "), aber dies scheint nicht mit der Web-API-Kommunikation zu stören, so sollte es in Ordnung sein.

Wenn jemand von einem einfachen Weg weiß, um alles grün und schön mit Nein zu machen Warnungen, ich bin immer noch interessiert, aber es ist nicht kritisch

+0

Wie kopierst du es? Ich bin nicht sicher, wie es in den MMC-Snap-Ins funktioniert. Ist es ein Export/Import? –

-2

Nein, Sie werden nicht in der Lage sein, ein Zertifikat für "localhost" professionell von einem seriösen SSL-Anbieter unterzeichnet, weil "localhost" ist nicht unter einem Domain-Namen das gehört Ihnen. (Tatsächlich ist es nicht genau unter einem Domain-Namen überhaupt; es ist ein blanker Hostname.)

Sie könnten in der Lage sein, einen echten Domain-Namen (z. B. loca lhost.example.com), das zu 127.0.0.1 aufgelöst wird und ein Zertifikat für dieses unterzeichnet erhält, aber das ist eher fraglich. Einige SSL-Provider signieren es möglicherweise nicht. Es ist jedoch einen Versuch wert!

+7

Die wirkliche Frage für die meisten, die diesen Thread lesen, ist, wie Chrome STFU über unser selbstsigniertes Zertifikat beim Testen auf localhost erstellt wird? Ich musste vor einem Monat zu Firefox wechseln, weil die Chrome-Erfahrung miserabel ist. – Amalgovinus

+3

Sie können Chrom in einem Modus starten, um alle SSL-Cert-Fehler zu ignorieren ... Es erfordert eine Befehlszeilenoption, funktioniert aber sehr gut. Versuchen Sie Folgendes: '--ignore-certificate-errors' an der Befehlszeile. Mehr [Details hier] (http://superuser.com/a/1036062/38941) –

0

Unter Linux hatte ich apt-gt install libnss3-tools

Mit libnss3-Tools, die Sie certutil

nun den Schlüssel-Befehl erhalten:

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

Diese lösen alle meine Probleme mit Chrome auf Raspberry/Linux