webentwicklung-frage-antwort-db.com.de

Das Zertifikat wird von PC als vertrauenswürdig eingestuft, nicht jedoch von Android

Seit heute morgen wird mein Zertifikat nicht mehr unter Android als vertrauenswürdig eingestuft, und meine Anwendung kann keine Verbindung mehr herstellen: 

 Catch exception while startHandshake: javax.net.ssl.SSLHandshakeException: Java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
 return an invalid session with invalid cipher suite of SSL_NULL_WITH_NULL_NULL
 javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
    at org.Apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.Java:137)
    at org.Apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.Java:93)
    at org.Apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.Java:381)
    at org.Apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.Java:165)
    at org.Apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.Java:164)
    at org.Apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.Java:119)
    at org.Apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.Java:360)
    at org.Apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.Java:591)
    at org.Apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.Java:807)
    at org.Apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.Java:781)
    at org.Apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.Java:770)

Wenn ich es in Google Chrome (auf dem PC) versuche, gibt es kein Problem und das Zertifikat ist vertrauenswürdig. Wenn ich jedoch den Chrome-Browser unter Android versuche, wird mir mitgeteilt, dass das Zertifikat nicht vertrauenswürdig ist. Was kann ich machen?

80
Alexis

Möglicherweise fehlt ein Zwischenzertifikat in Ihrer Zertifizierungsdatei. Wenn Sie bereits eine andere Website mit demselben Zertifikatverkäufer besucht haben, wird das Zwischenzertifikat in Ihrem Browser gespeichert. Dies kann nicht - oder noch besser - bei jedem Besucher Ihrer Website der Fall sein. Um ein fehlendes Zwischenzertifikat in der SSL-Verbindung zu lösen, müssen Sie das Zwischenzertifikat Ihrer eigenen Zertifikatsdatei hinzufügen.

GoDaddy enthält einige Informationen zu den Zwischenzertifikaten (die beste Quelle ist jedoch immer Ihr Zertifikatsanbieter): http://support.godaddy.com/help/article/868/what-is-an-intermediate-certificate

Ich hatte einmal diese Ausgabe eines Zwischenzertifikats (auch mit Commodo) und musste meine eigene Zertifizierungsdatei mit den Zwischenzertifizierungsstellen kombinieren, um zu funktionieren. Sobald dies geschehen ist, sind keine Fehler mehr aufgetreten.

Installationsanweisungen pro Webserver von Godaddy: http://support.godaddy.com/help/article/5346/installing-an-ssl-server-instructions?locale=de

Und hier ist eine Liste der häufigsten Installationsanleitungen von Commodo selbst: https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/1145/0/how-do -i-make-my-own-bundle-file-from-crt-files

Je nachdem, welchen Webserver Sie verwenden, müssen Sie alle Zertifikate (Domänenzertifikat, Zwischen- und Stammzertifikat) angeben oder in der Reihenfolge zusammenfassen (z. B. für Nginx): 

  1. domänenzertifikat
  2. zwischenzertifikat
  3. stammzertifikat

In einem SSH-Terminal können Sie dies einfach tun, indem Sie Folgendes eingeben: 

cat domainfile intermediatefile rootfile > targetfile

Zertifikat-Testwerkzeug

Wenn Sie auf weitere Probleme stoßen oder nicht sicher sind, ob das Zertifikat korrekt ist, versuchen Sie es mit einem Online-Tool, um Ihr SSL-Zertifikat zu überprüfen. Zum Beispiel: networking4all.com/de/ssl+certificates/quickscan 

SNI-Unterstützung für Android 2.2 und niedriger

Bitte beachten Sie, dass Android 2.2 (und wahrscheinlich älter) SNI nicht unterstützt, wodurch mehrere SSL-Zertifikate für verschiedene Hostnamen ohne Probleme mit einer einzigen IP-Adresse funktionieren. Vielen Dank an @technyquist für die Bereitstellung dieser Informationen. Bitte lesen Sie this SO über SNI , um weitere Informationen zu diesem Thema zu erhalten.

89
Luceos

Sie müssen ein CRT-Paket erstellen, dann wird es in Ordnung sein. Sie erhalten drei CRT-Dateien. Nutze sie alle! Wenn Sie nur die domain.crt verwendet haben, wird auf Android eine Warnung angezeigt, jedoch nicht auf dem PC.

Ich bin auf Nginx. Ich habe domain_name.crt und dann positivesslca2.crt geöffnet, alles ausgewählt und an das Ende von domain_name.crt kopiert. Öffnen Sie dann AddTrustExternalCARoot.crt und kopieren Sie sie erneut an das Ende von Domänenname.crt. Dann installieren Sie die Domäne_Name.crt

funktioniert gut.

19
dallas

Dies hier hinzuzufügen, da es jemandem helfen könnte. Ich hatte Probleme mit Android und zeigte den Popup- und ungültigen Zertifikatfehler an.

Wir verfügen über ein Comodo Extended Validation-Zertifikat und haben die ZIP-Datei mit 4 Dateien erhalten:

  • AddTrustExternalCARoot.crt
  • COMODORSAAddTrustCA.crt
  • COMODORSAExtendedValidationSecureServerCA.crt
  • www_mydomain_com.crt

Ich verkettete sie alle in einer Zeile wie folgt:

cat www_mydomain_com.crt COMODORSAExtendedValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >www.mydomain.com.ev-ssl-bundle.crt

Dann habe ich diese Bundle-Datei als ssl_certificate_key in nginx verwendet. Das ist es, funktioniert jetzt. 

Inspiriert von diesem Gist: https://Gist.github.com/ipedrazas/6d6c31144636d586dcc3

8
k00k

Ich hatte das gleiche Problem und mein Problem war, dass das Gerät nicht das richtige Datum und die richtige Uhrzeit hatte. Sobald ich feststellte, dass das Zertifikat vertrauenswürdig ist.

1
Boon

Mit Comodo PositiveSSL haben wir 4 Dateien erhalten.

  • AddTrustExternalCARoot.crt
  • COMODORSAAddTrustCA.crt 
  • COMODORSADomainValidationSecureServerCA.crt 
  • unsere_domain.crt

Als wir den Anweisungen auf der Comodo-Site folgten, bekamen wir die Fehlermeldung, dass unserem Zertifikat eine Zwischenzertifikatdatei fehlte. 

Grundsätzlich ist die Syntax

cat our_domain.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt  AddTrustExternalCARoot.crt > domain-ssl_bundle.crt
1
Mathew

Ich habe mich kürzlich mit Commodo cert beschäftigt, das ich auf ssls.com gekauft habe, und ich hatte 3 Dateien:

Domänenname.ca-Bundle Domänenname.crt und Domänenname.p7b

Ich musste es auf Nginx einrichten und dies ist der Befehl, den ich ausgeführt habe:

cat domain-name.ca-bundle domain-name.crt > commodo-ssl-bundle.crt

Ich habe dann in der Nginx-Konfigurationsdatei die Datei commodo-ssl-bundle.crt verwendet und funktioniert wie ein Zauber.

1
somecallitblues

Ich hoffe, ich bin nicht zu spät, diese Lösung hat für mich funktioniert, ich benutze COMODO SSL, die obigen Lösungen scheinen im Laufe der Zeit ungültig zu sein, meine Website lifetanstic.co.ke

Anstatt den Comodo-Support zu kontaktieren und eine CA-Bundle-Datei zu erhalten, können Sie Folgendes tun:

Wenn Sie Ihr neues SSL-Zertifikat von Comodo (per E-Mail) erhalten, wird eine ZIP-Datei angehängt. __ Sie müssen die ZIP-Datei entpacken und die folgenden Dateien in einem Texteditor wie einem Notizblock öffnen:

AddTrustExternalCARoot.crt
COMODORSAAddTrustCA.crt
COMODORSADomainValidationSecureServerCA.crt

Kopieren Sie dann den Text jeder ".crt" -Datei und fügen Sie die Texte übereinander in das Feld "Certificate Authority Bundle (optional)" ein.

Fügen Sie anschließend das SSL-Zertifikat wie üblich in das Feld "Zertifikat" ein, klicken Sie auf die Schaltfläche "Autofil by Certificate" und klicken Sie auf "Installieren".

0
Maina Wycliffe

Bei Godaddy-Zertifikaten haben Sie höchstwahrscheinlich einen domain.key, Gd_bundle_something.crt und (zufällige alphanumerische Zeichenfolge) 4923hg4k23jh4.crt

Sie müssen: cat Gd_bundle_something.crt >> 4923hg4k23jh4.crt

Und dann werden Sie auf Nginx verwenden 

ssl                  on;
ssl_certificate      /etc/ssl/certs/4923hg4k23jh4.crt;
ssl_certificate_key  /etc/ssl/certs/domain.key;
0
dazito

Ich hatte den gleichen Fehler, weil ich kein Let's Encrypt-Zertifikat für www .my-domain.com ausgestellt habe, nur für my-domain.com

Ausgabe auch für das www. und Konfigurieren des vhost, um Zertifikate für www .my-domain.com zu laden, bevor er auf https://my-domain.com umgeleitet wird. 

0
Adrian Onu

Stellen Sie sicher, dass Sie auch Ihre intermediäre CRT-Datei (.crt-Datei mit einem Bundle) verwenden. Einige Anbieter nennen es auch ein Bundle oder ein CA-Zertifikat.

SSLCertificateFile </path/for/actual/certificate>

SSLCACertificateFile </path/for/actual/intermediate_certificate>

starten Sie anschließend Ihren Webserver neu: Ex für Apache verwenden:

Sudo service httpd restart
0
Vikalp Veer

Ich hatte das gleiche Problem. Eine andere Möglichkeit, die richtige .crt-Datei zu erstellen, sieht folgendermaßen aus:

Manchmal erhalten Sie eine .PEM-Datei mit einer gesamten Zertifikatskette. Die Datei könnte so aussehen ....

-----BEGIN RSA PRIVATE KEY-----
blablablabase64private...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
blablablabase64CRT1...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
blablablabase64CRT2...
-----END CERTIFICATE-----
...

Wenn Sie den gesamten private key-Abschnitt entfernen, haben Sie eine gültige verkettete .crt

0

Dieses Problem trat unter Apache 2.2 auf, als ich versuchte, mehrere SSLCertificateChainFile-Direktiven für jedes Zwischenzertifikat zu verwenden. Stattdessen musste ich alle drei zu einer einzigen Datei verketten. Als ich von GoDaddy kam, wo sie das als "Bündel" für mich getan hatten, war dieser zusätzliche Schritt für mich neu, aber das erneute Lesen von der Apache-Dokumentation machte dies deutlich.

Es ist erwähnenswert, dass diese Direktive veraltet seit Apache 2.4.8 ist, _, da Sie nun alle Intermediates mit dem eigentlichen Zertifikat verketten können.

0
rymo