java.Sicherheit.cert.CertPathValidatorException: Vertrauen-Anker für die Zertifizierung Pfad nicht gefunden. Android 2.3
In meinem server (Produktionsserver), ich habe eine goDaddy-ssl-Zertifikat.
Ich habe beide iOS-und Android-apps die Verbindung mit dem server, iOS-Verbindung mit keine Probleme, mit android-Versionen 4.* alles ist gut, aber mit Geräten mit 2.3.* Ich bekomme immer eine SSLHandshakeException.
Habe ich genau wie bei der Android-Entwickler-Seite (https://developer.android.com/training/articles/security-ssl.html).
Sah ich schon ähnliche threads hier im stackoverflow ( hier ), aber keiner hilft.
Dann sah ich diese thread reden, Extended Key Usage, aber beim Debuggen bekomme ich folgende Informationen:
[2]: OID: 2.5.29.37, Critical: false
Extended Key Usage: [ "1.3.6.1.5.5.7.3.1", "1.3.6.1.5.5.7.3.2" ]
Also ich denke, das Zertifikat ist nicht "zwingen" Extended Key Usage.
Auch auf diese thread gibt es einige weitere mögliche Ursachen, wie Datum/Zeit völlig falsch, die sind alle nicht mehr existent.
Nehmen, die berücksichtigt, die ich jetzt nicht weiß, wo das problem sein könnte.
Irgendwelche Vorschläge?
EDIT:
StackTrace unten:
08-04 16:54:30.139: W/System.err(4832): Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
08-04 16:54:30.149: W/System.err(4832): at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:161)
08-04 16:54:30.149: W/System.err(4832): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:664)
08-04 16:54:30.149: W/System.err(4832): at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)
08-04 16:54:30.159: W/System.err(4832): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:474)
- Können Sie uns den stacktrace?
- Was ist die URL zu dem server?
- Auch, Sie können eine Kostenlose StartCom Klasse 1 server-cert, die vertrauenswürdigen von den meisten desktop-und mobile Browser. Es beinhaltet iOS 2.0 und Ansdroid 2.2. Siehe StartSSL Comparison Chart und Liste der browser-Versionen mit StartCom certs. Wenn Sie einen Platzhalter, dann werden Sie haben, um es zu kaufen obwohl.
- sorry, ich will nicht zu identifizieren, mich und/oder mein Unternehmen, damit ich nicht das Gefühl, komfortable, es zu zeigen. Aber können Sie mir sagen, was war die Idee? Ich kaufte bereits eine goDaddy-Zertifikat, so würde es keinen Punkt in den Kauf einer anderen one.
- Startcom und CAcert - Class-1-Zertifikate sind kostenlos. Ich möchte die Ausgabe von
openssl s_client -connect <server>:<port>
um sicherzustellen, dass Sie senden eine gültige Kette. - Welche version von TLS ist Ihr server läuft? TLS v1.0 als veraltet...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie der Emittent des Zertifikats nicht in den trust-store des 2.3-Geräte.
Werfen Sie einen Blick auf die root und intermediate ca ' s Ihre GoDaddy Zertifikat und überprüfen, ob die Zertifikate vorhanden sind, die auf Ihre 2.3 Gerät.
Sehen http://www.andreabaccega.com/blog/2010/09/23/android-root-certification-authorities-list/ für den Erhalt einer Liste von 2.3 Zertifikate.
Wenn nur die root-CA verfügbar ist, stellen Sie sicher, dass Ihr webserver dient auch die Zwischenzertifikate auf Anfrage.
SSLContext
. Es ist irgendwie lächerlich, dass Sie nicht alle Informationen. Wie erwarten Sie, dass die Gemeinschaft Ihnen helfen? Die Frage könnte geschlossen werden: in der Nähe Grund, wenn Sie gezielt falsche Informationen angegeben?.Ging ich durch VIELE Orte in SO und das web zu lösen, dieses Ding.
Dies ist der code, hat bei mir (Android 21):
app.certificateString
ist ein String, der das Zertifikat enthält, zum Beispiel:Habe ich getestet, Sie können beliebige Zeichen in das Zertifikat string, wenn es selbst unterzeichnet, so lange wie Sie halten die genaue Struktur vor.
Ich erhielt das Zertifikat string mit meinem laptop das Terminal-Befehlszeile. Ich, die Sie brauchen, um mehr details wissen, lass es mich wissen.
Falls jemand braucht, die Antwort, habe ich endlich die Antwort gefunden nach 2 Tagen von google. Im Grunde brauchen wir custom TrustManager zu vertraut der CAs in unseren KeyStore, ist dies, weil in Android 2.3.x, der keystore ist nicht richtig. Kredit https://github.com/delgurth für die CustomTrustManager.
Bitte: https://github.com/ikust/hello-pinnedcerts/issues/2
KeyPinStore.java
CustomTrustManager.java
Es zu benutzen, nur um die SSLSocketFactory und anwenden, zB:
mit HttpsURLConnection
mit Volley