Frage Chrome erhält ein selbstsigniertes Localhost-Zertifikat


Ich habe ein selbstsigniertes SSL-Zertifikat für den localhost CN erstellt. Firefox akzeptiert dieses Zertifikat nach anfänglicher Beschwerde wie erwartet. Chrome und IE verweigern dies jedoch, auch nachdem das Zertifikat dem Zertifikatspeicher des Zertifikats unter "Vertrauenswürdige Roots" hinzugefügt wurde. Obwohl das Zertifikat als ordnungsgemäß installiert angezeigt wird, wenn ich im Chrome-HTTPS-Popup auf "Zertifikatsinformationen anzeigen" klicke, besteht es trotzdem darauf, dass das Zertifikat nicht vertrauenswürdig ist.

Was soll ich tun, damit Chrome das Zertifikat akzeptiert und aufhört, sich darüber zu beschweren?


795
2017-09-28 08:41


Ursprung


Antworten:


Das hat für mich funktioniert:

  1. Rufen Sie mit Chrome eine Seite auf Ihrem Server über HTTPS auf und fahren Sie über die rote Warnseite hinaus (vorausgesetzt, Sie haben dies noch nicht getan).
  2. Aufmachen Chrome Settings > Show advanced settings > HTTPS/SSL > Manage Certificates.
  3. Drücke den Authorities Tab und scrollen Sie nach unten, um Ihr Zertifikat unter dem Organisationsnamen zu finden, den Sie dem Zertifikat gegeben haben.
  4. Wählen Sie es aus und klicken Sie auf Bearbeiten (HINWEIS: In neueren Versionen von Chrome ist die Schaltfläche jetzt "Erweitert" anstelle von "Bearbeiten". Aktivieren Sie alle Kontrollkästchen und klicken Sie auf OK. Möglicherweise müssen Sie Chrome neu starten.

Sie sollten jetzt das schöne grüne Schloss auf Ihren Seiten bekommen.

BEARBEITEN: Ich habe dies auf einem neuen Rechner erneut versucht, und das Zertifikat wurde nicht im Fenster "Zertifikate verwalten" angezeigt, nur indem ich von der roten Seite des nicht vertrauenswürdigen Zertifikats fortfuhr. Ich musste folgendes tun:

  1. Auf der Seite mit dem nicht vertrauenswürdigen Zertifikat (https:// ist rot durchgestrichen), klicken Sie auf das Schloss> Zertifikatsinformationen. HINWEIS: Bei neueren Versionen von Chrome müssen Sie öffnen Developer Tools > Securityund wählen Sie View certificate.
  2. Drücke den Details tab > Export. Wählen PKCS #7, single certificate als Dateiformat.
  3. Folgen Sie dann meinen ursprünglichen Anweisungen, um zur Seite Zertifikate verwalten zu gelangen. Drücke den Authorities tab > Import und wählen Sie die Datei, in die Sie das Zertifikat exportiert haben, und Achten Sie darauf, zu wählen  PKCS #7, single certificate  als Dateityp.
  4. Wenn Sie den Zertifizierungsspeicher angeben, wählen Sie Vertrauenswürdige Stammzertifizierungsstellen
  5. Aktivieren Sie alle Kontrollkästchen und klicken Sie auf OK. Starten Sie Chrome neu.

414
2018-02-25 21:14



NICHT FÜR PROD

Fügen Sie das einfach in Ihr Chrom ein:

chrome://flags/#allow-insecure-localhost

Sie sollten den hervorgehobenen Text sehen, der sagt: Erlaube ungültige Zertifikate für Ressourcen, die von localhost geladen wurden

Klicken Enable.


393
2017-08-09 01:52



Auf dem Mac können Sie das Dienstprogramm Keychain Access verwenden, um das selbstsignierte Zertifikat zum System-Schlüsselbund hinzuzufügen, und Chrome akzeptiert es dann. Ich habe die Schritt-für-Schritt-Anleitung hier gefunden:

Google Chrome, Mac OS X und selbstsignierte SSL-Zertifikate

Grundsätzlich gilt:

  1. Doppelklicken Sie auf das Schlosssymbol mit einem X und ziehen Sie das Zertifikatssymbol auf den Desktop,
  2. öffne diese Datei (endend mit der Erweiterung .cer); Dies öffnet die Schlüsselbund-Anwendung, mit der Sie das Zertifikat genehmigen können.

119
2017-10-31 15:56



UPDATE FÜR CHROM 58+ (FREIGEGEBEN 2017-04-19)

Ab Chrome 58, Identifizierung des Hosts, der nur verwendet commonName  wird entfernt. Siehe weiter Diskussion hier und Bug-Tracker hier. In der Vergangenheit, subjectAltName wurde nur für Multi-Host-Zertifikate verwendet, daher enthalten einige interne CA-Tools sie möglicherweise nicht.

Wenn Ihre selbstsignierten Zertifikate in der Vergangenheit gut funktionierten aber plötzlich begann in Chrome 58 Fehler zu generieren, deshalb.

Welche Methode Sie auch verwenden, um Ihr selbstsigniertes Zertifikat (oder Zertifikat, das von einer selbstsignierten Zertifizierungsstelle signiert wurde) zu erstellen, stellen Sie sicher, dass das Zertifikat des Servers Folgendes enthält: a subjectAltName mit dem richtigen DNS und / oder IP Eintrag / Einträge, auch wenn es nur für einen einzelnen Host ist.

Für openssl bedeutet dies, dass Ihre Konfiguration für einen einzelnen Host etwas Ähnliches hat:

[v3_req]
subjectAltName = DNS:example.com

oder für mehrere Hosts:

[v3_req]
subjectAltName = DNS:example.com, DNS:host1.example.com, DNS:*.host2.example.com, IP:10.1.2.3

In Chrome cert viewer (der unter "F12" in die Registerkarte "Sicherheit" verschoben wurde) sollten Sie ihn unter aufgelistet sehen Extensions wie Certificate Subject Alternative Name:

Chrome cert viewer


VORLÄUFIGES PROBLEM

Es ist möglich, auf das Alte zurückzugreifen commonName Verhalten bis Chrome 65mit der folgenden Einstellung: EnableCommonNameFallbackForLocalAnchors

Unter WindowsDies kann mit dem folgenden Registrierungsbefehl auf einem einzelnen PC eingestellt werden (danke @Meengla):

reg add HKLM\Software\Policies\Google\Chrome /v EnableCommonNameFallbackForLocalAnchors /t REG_DWORD /d 1

Auf dem Mac, der folgende Befehl kann verwendet werden (danke @BugsBunny):

defaults write com.google.Chrome EnableCommonNameFallbackForLocalAnchors -bool true

Unter Linux, erstellen Sie eine Richtliniendatei wie /etc/opt/chrome/policies/managed/EnableCommonNameFallbackFor‌​LocalAnchors.json mit dem Inhalt: { "EnableCommonNameFallbackForLocalAnchors": true } (Danke @Seanf)

Weitere Informationen zum Festlegen dieser Richtlinien für verschiedene Plattformen, einschließlich ihrer Einrichtung über das Windows-Gruppenrichtlinienobjekt, finden Sie oben auf der verknüpften Seite die Chroma-Richtlinie Vorlagenvorlage und das Leitfaden für Administratoren.


Auch diese Problemumgehungen sind vorübergehend bis Version 65!


98
2018-03-21 02:12



UPDATE 11/2017: Diese Antwort wird wahrscheinlich nicht für die meisten neueren Versionen von Chrome funktionieren.

UPDATE 02/2016: Bessere Anweisungen für Mac-Benutzer können gefunden werden Hier.

  1. Klicken Sie auf der Website, die Sie hinzufügen möchten, mit der rechten Maustaste auf das rote Schlosssymbol in der Adressleiste:enter image description here

    1. Klicken Sie auf die Registerkarte mit der Beschriftung Verbindung, dann klick Zertifikatsinformationen

    2. Drücke den Einzelheiten Klicken Sie auf die Schaltfläche In Datei kopieren .... Dies öffnet den Zertifikatexport-Assistenten, klicken Sie auf Nächster hinkommen Dateiformat exportieren Bildschirm.

    3. Wählen DER-codierte Binärdatei X.509 (.CER), klicken Nächster

    4. Klicken Durchsuche... und speichern Sie die Datei auf Ihrem Computer. Nennen Sie es etwas beschreibend. Klicken Nächster, dann klick Fertig.

    5. Öffnen Sie die Chrome-Einstellungen, scrollen Sie nach unten und klicken Sie auf Erweiterte Einstellungen anzeigen...

    6. Unter HTTPS / SSL, klicken Zertifikate verwalten ...

    7. Drücke den Vertrauenswürdige Stammzertifizierungsstellen Klicken Sie auf die Registerkarte Einführen... Taste. Dies öffnet den Zertifikatsimport-Assistenten. Klicken Nächster hinkommen Zu importierende Datei Bildschirm.

    8. Klicken Durchsuche... Wählen Sie die zuvor gespeicherte Zertifikatsdatei aus und klicken Sie auf Nächster.

    9. Wählen Legen Sie alle Zertifikate in dem folgenden Speicher ab. Das ausgewählte Geschäft sollte sein Vertrauenswürdige Stammzertifizierungsstellen. Wenn dies nicht der Fall ist, klicken Sie auf Durchsuche...und wähle es aus. Klicken Nächster und Fertig

    10. Klicken Ja auf die Sicherheitswarnung.

    11. Starten Sie Chrome neu.


86
2017-09-03 22:56



Linux

Wenn Sie Linux verwenden, können Sie auch folgenden offiziellen Wiki-Seiten folgen:

Grundsätzlich gilt:

  • Klicken Sie auf das Schlosssymbol mit einem X,
  • Wählen Sie Zertifikatsinformationen
  • Gehe zum Tab Details
  • Klicken Sie auf Exportieren ... (als Datei speichern)

Jetzt fügt der folgende Befehl das Zertifikat hinzu (wobei YOUR_FILE die exportierte Datei ist):

certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n YOUR_FILE -i YOUR_FILE

Führen Sie den folgenden Befehl aus, um alle Ihre Zertifikate aufzulisten:

certutil -d sql:$HOME/.pki/nssdb -L

Wenn es immer noch nicht funktioniert, könnten Sie von diesem Fehler betroffen sein: Problem 55050: Ubuntu SSL-Fehler 8179

P.S. Bitte stellen Sie auch sicher, dass Sie haben libnss3-tools, bevor Sie die obigen Befehle verwenden können.

Wenn Sie nicht haben, installieren Sie es bitte durch:

sudo apt-get install libnss3-tools # on Ubuntu
sudo yum install nss-tools # on Fedora, Red Hat, etc.

Als Bonus können Sie die folgenden handlichen Skripts verwenden:

$ cat add_cert.sh
certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n $1 -i $1
$ cat list_cert.sh
certutil -d sql:$HOME/.pki/nssdb -L # add '-h all' to see all built-in certs
$ cat download_cert.sh
echo QUIT | openssl s_client -connect $1:443 | sed -ne '/BEGIN CERT/,/END CERT/p'

Verwendung:

add_cert.sh [FILE]
list_cert.sh
download_cert.sh [DOMAIN]

Fehlerbehebung

  • Führen Sie Chrome mit aus --auto-ssl-client-auth Parameter

    google-chrome --auto-ssl-client-auth


82
2017-09-18 14:11



Klicken Sie auf eine beliebige Stelle auf der Seite und geben Sie einen BYPASS_SEQUENCE ein

"thisisunsafe"ist eine BYPASS_SEQUENCE für Chrome Version 65

"badidea"Chrome-Version 62 - 64.

"danger"Früher in früheren Versionen von Chrome gearbeitet

Sie müssen nicht nach Eingabefeld suchen, sondern einfach eingeben. Es fühlt sich seltsam an, aber es funktioniert.

Ich habe es auf Mac High Sierra versucht.

Um zu überprüfen, ob sie erneut geändert wurden, gehen Sie zu Neueste Chrom Quellcode 

Um nach BYPASS_SEQUENCE zu suchen, sieht es im Moment so aus:

var BYPASS_SEQUENCE = window.atob('dGhpc2lzdW5zYWZl');

Jetzt haben sie es getarnt, aber um die echte BYPASS_SEQUENCE zu sehen, können Sie folgende Zeile in einer Browserkonsole ausführen.

console.log(window.atob('dGhpc2lzdW5zYWZl'));

65
2017-12-05 05:08



Wenn du bist auf einem Mac und die Export-Registerkarte nicht zu sehen oder wie das Zertifikat zu bekommen, das hat für mich funktioniert:

  1. Klicken Sie auf das Schloss vor dem https: //
  2. Wechseln Sie zur Registerkarte "Verbindung"
  3. Klicken Sie auf "Zertifikatsinformationen"

    Jetzt sollten Sie das sehen: Different information of course and yours should be marked as trusted yet (otherwise      you probably wouldn't be here)

  4. Ziehe das kleine Zertifikatssymbol auf deinen Desktop (oder wo auch immer).

  5. Doppelklicken Sie auf die heruntergeladene CER-Datei, diese sollte in Ihren Schlüsselbund importiert werden und den Schlüsselbundzugriff auf Ihre Zertifikatsliste öffnen.

    In einigen Fällen ist dies ausreichend und Sie können die Seite jetzt aktualisieren.

    Andernfalls:

  6. Doppelklicken Sie auf das neu hinzugefügte Zertifikat.
  7. Ändern Sie die Option "Bei Verwendung dieses Zertifikats" unter "Trust" auf "Immer vertrauen".

Jetzt lade die betreffende Seite neu und es sollte ein Problem gelöst sein! Hoffe das hilft.


Bearbeiten von Wolff

Um dies ein wenig einfacher zu machen, können Sie das folgende Skript verwenden (Quelle):

  1. Speichern Sie Folgendes Skript wie whitelist_ssl_certificate.ssh:

    #!/usr/bin/env bash -e
    
    SERVERNAME=$(echo "$1" | sed -E -e 's/https?:\/\///' -e 's/\/.*//')
    echo "$SERVERNAME"
    
    if [[ "$SERVERNAME" =~ .*\..* ]]; then
        echo "Adding certificate for $SERVERNAME"
        echo -n | openssl s_client -connect $SERVERNAME:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | tee /tmp/$SERVERNAME.cert
        sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" /tmp/$SERVERNAME.cert
    else
        echo "Usage: $0 www.site.name"
        echo "http:// and such will be stripped automatically"
    fi
    
  2. Machen Sie das Skript ausführbar (über die Shell):

    chmod +x whitelist_ssl_certificate.ssh
    
  3. Führen Sie das Skript für die gewünschte Domain aus (Kopieren / Einfügen der vollständigen URLs):

    ./whitelist_ssl_certificate.ssh https://your_website/whatever
    

55
2018-01-14 04:53



Auf dem Mac können Sie auf Systemebene ein Zertifikat erstellen, das Chrome und Safari voll und ganz vertraut, indem Sie Folgendes ausführen:

# create a root authority cert
./create_root_cert_and_key.sh

# create a wildcard cert for mysite.com
./create_certificate_for_domain.sh mysite.com

# or create a cert for www.mysite.com, no wildcards
./create_certificate_for_domain.sh www.mysite.com www.mysite.com

Das obige verwendet die folgenden Skripts und eine unterstützende Datei v3.extbis vermeiden Sie den alternativen Namen des Antragstellers, der Fehler fehlt

Wenn Sie ein neues selbstsigniertes Zertifikat erstellen möchten, das mit Ihrer eigenen Root-Berechtigung vollständig vertrauenswürdig ist, können Sie dies mithilfe dieser Skripts tun.

create_root_cert_and_key.sh

#!/usr/bin/env bash
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

create_certificate_for_domain.sh

#!/usr/bin/env bash

if [ -z "$1" ]
then
  echo "Please supply a subdomain to create a certificate for";
  echo "e.g. www.mysite.com"
  exit;
fi

if [ ! -f rootCA.pem ]; then
  echo 'Please run "create_root_cert_and_key.sh" first, and try again!'
  exit;
fi
if [ ! -f v3.ext ]; then
  echo 'Please download the "v3.ext" file and try again!'
  exit;
fi

# Create a new private key if one doesnt exist, or use the xeisting one if it does
if [ -f device.key ]; then
  KEY_OPT="-key"
else
  KEY_OPT="-keyout"
fi

DOMAIN=$1
COMMON_NAME=${2:-*.$1}
SUBJECT="/C=CA/ST=None/L=NB/O=None/CN=$COMMON_NAME"
NUM_OF_DAYS=999
openssl req -new -newkey rsa:2048 -sha256 -nodes $KEY_OPT device.key -subj "$SUBJECT" -out device.csr
cat v3.ext | sed s/%%DOMAIN%%/"$COMMON_NAME"/g > /tmp/__v3.ext
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days $NUM_OF_DAYS -sha256 -extfile /tmp/__v3.ext 

# move output files to final filenames
mv device.csr "$DOMAIN.csr"
cp device.crt "$DOMAIN.crt"

# remove temp file
rm -f device.crt;

echo 
echo "###########################################################################"
echo Done! 
echo "###########################################################################"
echo "To use these files on your server, simply copy both $DOMAIN.csr and"
echo "device.key to your webserver, and use like so (if Apache, for example)"
echo 
echo "    SSLCertificateFile    /path_to_your_files/$DOMAIN.crt"
echo "    SSLCertificateKeyFile /path_to_your_files/device.key"

v3.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = %%DOMAIN%%

Noch ein Schritt - So machen Sie die selbstsignierten Zertifikate in Chrome / Safari voll vertrauenswürdig

Damit die selbstsignierten Zertifikate in Chrome und Safari vollständig vertrauenswürdig sind, müssen Sie eine neue Zertifizierungsstelle in Ihren Mac importieren. Befolgen Sie dazu diese Anweisungen oder die detaillierteren Anweisungen zu diesem allgemeinen Prozess auf der Mitmproxy-Website:

  1. Öffnen Sie den Schlüsselbund
  2. Wählen Sie "System" in der "Schlüsselanhänger" -Liste
  3. Wählen Sie "Zertifikate" in der Liste "Kategorie"
  4. Wählen Sie "Datei | Objekte importieren ..."
  5. Suchen Sie nach der Datei "rootCA.pem", wählen Sie sie aus und klicken Sie auf "Öffnen"
  6. Wählen Sie Ihr neu importiertes Zertifikat in der Liste "Zertifikate" aus.
  7. Klicken Sie auf die Schaltfläche "i", oder klicken Sie mit der rechten Maustaste auf Ihr Zertifikat und wählen Sie "Get Info"
  8. Erweitern Sie die Option "Vertrauen"
  9. Ändern Sie "Wenn Sie dieses Zertifikat verwenden" zu "Immer vertrauen"
  10. Schließen Sie den Dialog und Sie werden nach Ihrem Passwort gefragt.
  11. Schließen und öffnen Sie alle Registerkarten, die Ihre Zieldomäne verwenden, und sie wird sicher geladen!

und als Bonus, wenn Sie Java-Clients benötigen, um den Zertifikaten zu vertrauen, können Sie dies tun, indem Sie Ihre Zertifikate in den Java-Keystore importieren. Beachten Sie, dass das Zertifikat aus dem Keystore entfernt wird, wenn es bereits vorhanden ist, da es aktualisiert werden muss, falls sich etwas ändert. Natürlich nur für die importierten Zertifikate.

import_certs_in_current_folder_into_java_keystore.sh

KEYSTORE="$(/usr/libexec/java_home)/jre/lib/security/cacerts";

function running_as_root()
{
  if [ "$EUID" -ne 0 ]
    then echo "NO"
    exit
  fi

  echo "YES"
}

function import_certs_to_java_keystore
{
  for crt in *.crt; do 
    echo prepping $crt 
    keytool -delete -storepass changeit -alias alias__${crt} -keystore $KEYSTORE;
    keytool -import -file $crt -storepass changeit -noprompt --alias alias__${crt} -keystore $KEYSTORE
    echo 
  done
}

if [ "$(running_as_root)" == "YES" ]
then
  import_certs_to_java_keystore
else
  echo "This script needs to be run as root!"
fi

52
2018-04-27 19:20



AKTUALISIERT 3. April 2018

Empfohlen vom Chromium-Team

https://www.chromium.org/Home/chromium-security/deprecasting-powerful-features-on-in-secure-origins#TOC-Testing-Powerful-Features

Schnelle super-einfache Lösung

Es gibt eine geheime Umgehungsformel, die in die Fehlerseite eingegeben werden kann, damit Chrome trotz des Sicherheitsfehlers weiterläuft: thisisunsafe (In früheren Versionen von Chrome geben Sie Folgendes ein schlechte Ideeund noch früher, Achtung). MACHEN NICHT VERWENDEN SIE DIESE NUR, WENN SIE GENAU VERSTEHEN, WARUM SIE ES BRAUCHEN!

Quelle:

https://chromium.googlesource.com/chromium/src/+/d8fc089b62cd4f8d907acff6fb3f5ff58f168697%5E%21/

(Beachten Sie, dass window.atob('dGhpc2lzdW5zYWZl') verrechnet zu thisisunsafe)

Die neueste Version der Quelle ist @ https://chromium.googlesource.com/chromium/src/+/refs/heads/master/components/security_interstitials/core/browser/resources/interstitial_large.js und das window.atob Funktion kann in einer JS-Konsole ausgeführt werden.

Hintergrundinformationen dazu, warum das Chrome-Team die Umleitungsphrase (das erste Mal) geändert hat:

https://bugs.chromium.org/p/chromium/issues/detail?id=581189

Wenn alle Stricke reißen

Für schnelle Unikate, wenn die "Proceed Anyway" Option nicht verfügbar ist, noch die Bypass-Phrase funktioniert, funktioniert dieser Hack gut:

  1. Erlaube Zertifikatsfehler von localhost durch Aktivieren dieses Flags (Chrome muss nach dem Ändern des Flag-Werts neu gestartet werden):

    chrome://flags/#allow-insecure-localhost

    (und eine Antwort auf die Abstimmung https://stackoverflow.com/a/31900210/430128 von @Chris)

  2. Wenn die Site mit der Sie sich verbinden möchten localhost, Sie sind fertig. Andernfalls richten Sie einen TCP-Tunnel ein, um Port 8090 lokal zu überwachen und eine Verbindung herzustellen broken-remote-site.com auf Port 443, stellen Sie sicher, dass Sie haben socat installiert und führen Sie so etwas in einem Terminalfenster aus:

    socat tcp-listen:8090,reuseaddr,fork tcp:broken-remote-site.com:443

  3. Gehe zu https: // localhost: 8090 in Ihrem Browser.


34
2017-08-12 20:38