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

82

Seit heute Morgen ist mein Zertifikat unter Android nicht mehr vertrauenswürdig 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 es jedoch im Chrome-Browser unter Android versuche, wird mir mitgeteilt, dass das Zertifikat nicht vertrauenswürdig ist. Was kann ich tun?

Alexis
quelle
Sie kommunizieren mit einem gesicherten Server, dh (Https)?
Mohsin Naeem
Ja, versuchen Sie einfach den Link, Sie werden das Zertifikat sehen
Alexis

Antworten:

92

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

GoDaddy hat einige Informationen zu den Zwischenzertifikaten (aber die beste Quelle ist 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 Zertifikatsdatei mit den Zwischenzertifizierungsstellen kombinieren, um zu funktionieren. Danach 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 gängigsten Installationshandbücher von Commodo selbst: https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/1145/0/how-do-i-make- meine-eigene-Bundle-Datei-aus-CRT-Dateien

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

  1. Domain-Zertifikat
  2. Zwischenzertifikat
  3. Stammzertifikat

Eine einfache Möglichkeit, dies in einem SSH-Terminal zu tun, besteht darin, Folgendes einzugeben:

cat domainfile intermediatefile rootfile > targetfile

Zertifikatstest-Tool

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: network4all.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 können. Vielen Dank an @technyquist für die Bereitstellung dieser Informationen. Weitere Informationen zu diesem Problem finden Sie in dieser SO-Frage zu SNI .

Luceos
quelle
+1, dies funktionierte für mein Problem mit 2.3.X-Geräten, da sie anscheinend ein Problem mit der Reihenfolge der verketteten Überprüfung haben (ich bin ziemlich unkompliziert, wenn es um Zertifikate geht) und mit diesem neuen Bundle mit der richtigen Reihenfolge (über Kombination) wie @Luceos vorgeschlagen) arbeitete wie ein Zauber. Danke
Armando
Gern geschehen, wir nutzen es auch regelmäßig. Vor allem, weil es mehr als nur ein Zwischenzertifikat validiert. Ich bin froh, dass ich helfen konnte.
Luceos
Der Link für Comodo ist tot
gfaceless
1
Danke für die Erklärung. Ich habe ein Thawte-Zertifikat und musste mich auf der Website anmelden. Klicken Sie auf "Bestellinformationen anzeigen". Die gesendete E-Mail enthält einen Link, über den das Zwischenzertifikat unter "Zusätzliche Zertifikate" heruntergeladen werden kann.
Guillaume Renoult
1
Dies funktionierte für mein OpenMediaVault NAS und mein Telefon mit Marshmallow. Das Zertifikat wurde auf dem Server bearbeitet, die Zwischenzertifikate angehängt, gespeichert und die Weboberfläche neu gestartet, und Chrome auf meinem Telefon wurde von "nicht vertrauenswürdiger Aussteller" zu fett und zufrieden mit dem Zertifikat. Vielen Dank!
Doktor J
19

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

Ich bin auf Nginx. Ich habe domain_name.crt geöffnet und dann positivesslca2.crt geöffnet, alle ausgewählt und an das Ende von domain_name.crt kopiert. Öffnen Sie dann AddTrustExternalCARoot.crt und kopieren Sie es erneut an das Ende von domain_name.crt. Installieren Sie dann die Datei domain_name.crt

funktioniert gut.

Dallas
quelle
Dies scheint die Lösung zu sein, nach der ich suche, aber es funktioniert immer noch nicht für mich. Ich bin auch auf Nginx mit einem Godaddy-Zertifikat. godaddy hat 3 Zertifikate: domain.crt, intermediär.crt und bundle.crt. Wissen Sie, welche Reihenfolge Ihrer Antwort entspricht? dh Domain> Intermediate> Bundle oder Domain> Bundle> Intermediate? aus irgendeinem Grund funktioniert beides bei mir nicht.
Isapir
Anscheinend ist bundle.crt die [intermediate.crt + root.crt] verkettet, so dass dies die richtige Reihenfolge zu sein scheint. Aber ich kann es immer noch nicht zum Laufen bringen. Irgendwelche Ideen? Vielen Dank.
Isapir
Sie benötigen das Root-Verzeichnis nicht, das bereits im Betriebssystem enthalten ist. Sie brauchen nur die Zwischenkette. Bestellung sollte Ihre + Zwischen sein.
Bangalore
9

Fügen Sie dies hier hinzu, da es jemandem helfen könnte. Ich hatte Probleme mit Android, das Popup und einen ungültigen Zertifikatfehler anzuzeigen.

Wir haben ein Comodo Extended Validation-Zertifikat und haben die Zip-Datei erhalten, die 4 Dateien enthielt:

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

Ich habe sie alle so in einer Zeile verkettet:

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 meine ssl_certificate_keyin Nginx verwendet. Das war's, funktioniert jetzt.

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

k00k
quelle
1
Ich habe alle anderen vorgeschlagenen Schritte ausprobiert. Das hat bei mir funktioniert. Vielen Dank!
Ericbae
1
Gute Arbeit, googelte wie verrückt und das hat es behoben.
Olafur Tryggvason
Vielen Dank, und wenn jemand anderes Namecheap verwendet, stellen Sie sicher, dass es in diesem Format vorliegt: cat *yourdomainname*.crt *yourdomainname*.ca-bundle > cert_chain.crt
Harry
1

Mit Comodo PositiveSSL haben wir 4 Dateien erhalten.

  • AddTrustExternalCARoot.crt
  • COMODORSAAddTrustCA.crt
  • COMODORSADomainValidationSecureServerCA.crt
  • our_domain.crt

Wenn wir den Anweisungen auf der Comodo-Site folgen, wird die Fehlermeldung angezeigt, dass in unserem Zertifikat eine Zwischenzertifikatsdatei fehlt.

Grundsätzlich ist die Syntax

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

Ich habe mich kürzlich mit diesem Commodo-Zertifikat befasst, das ich auf ssls.com gekauft habe, und ich hatte 3 Dateien:

domain-name.ca-bundle domain-name.crt und domain-name.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 Commodo-ssl-bundle.crt in der Nginx-Konfigurationsdatei verwendet und funktioniert wie ein Zauber.

Somecallitblues
quelle
1

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

Segen
quelle
1

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

Ausgabe auch für das www. und das Konfigurieren des vhost zum Laden von Zertifikaten für www .my-domain.com vor der Umleitung zu https://my-domain.com hat den Trick ausgeführt.

Adrian Onu
quelle
0

Ich habe dasselbe Problem unter Apache 2.2 SSLCertificateChainFilefestgestellt, als ich versucht habe, mehrere Anweisungen für jedes Zwischenzertifikat zu verwenden. Stattdessen musste ich alle drei zu einer einzigen Datei verketten. Als ich von GoDaddy kam, wo sie dies für mich als "Bündel" getan hatten, war dieser zusätzliche Schritt für mich neu, aber ein erneutes Lesen der Apache-Dokumentation machte dies deutlich.

Bemerkenswert ist, dass diese Direktive ab Apache 2.4.8 veraltet ist, da Sie jetzt alle Zwischenprodukte mit dem tatsächlichen Zertifikat verketten können.

Rymo
quelle
0

Ich hoffe, ich bin nicht zu spät, diese Lösung hier hat für mich funktioniert, ich verwende COMODO SSL, die oben genannten Lösungen scheinen im Laufe der Zeit ungültig, 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 Notepad ö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 danach einfach das SSL-Zertifikat wie gewohnt in das Feld "Zertifikat" ein, klicken Sie auf die Schaltfläche "Nach Zertifikat automatisch filtern" und klicken Sie auf "Installieren".


quelle
0

Bei Godaddy-Zertifikaten haben Sie höchstwahrscheinlich ein domain.key, gd_bundle_something.crtund (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;
dazito
quelle
0

Ich hatte das gleiche Problem. Eine andere Möglichkeit, die richtige CRT-Datei zu generieren, ist folgende:

Manchmal erhalten Sie eine .PEM-Datei mit einer gesamten Zertifikatkette. 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 keyAbschnitt entfernen , erhalten Sie eine gültige verkettete .crt

David Valdivieso
quelle
0

Stellen Sie sicher, dass Sie auch Ihr Zwischen-CRT verwenden (CRT-Datei mit einem Bundle. Einige Anbieter nennen es auch Bundle oder CA-Zertifikat). dann in deiner ssl.conf,

SSLCertificateFile </path/for/actual/certificate>

SSLCACertificateFile </path/for/actual/intermediate_certificate>

Starten Sie dann Ihren Webserver neu: ex für Apache-Verwendung:

sudo service httpd restart
Vikalp Veer
quelle
-1

Möglicherweise fehlt Ihnen das Zertifikat auf Ihrem Gerät.

Schauen Sie sich diese Antwort an: Wie installiere ich ein vertrauenswürdiges CA-Zertifikat auf einem Android-Gerät? um zu sehen, wie Sie die Zertifizierungsstelle auf Ihrem eigenen Gerät installieren.

thepoosh
quelle
Mein Zertifikat wird von PositiveSSL CA / Comodo CA Limited ausgestellt und in meinen vertrauenswürdigen Anmeldeinformationen auf meinem Telefon kann ich 3 Comodo CA Limited (AAA-Zertifizierungsstelle, COMODO-Zertifizierungsstelle und COMODO ECC-Zertifizierungsstelle) sehen
Alexis