Vertrauen-Anker nicht gefunden für Android SSL-Verbindung
Ich versuche, die Verbindung zu einem IIS6 box läuft ein godaddy 256-bit-SSL-cert, und ich bin immer der Fehler :
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
Wurde versucht zu bestimmen, was könnte die Ursache, aber die Zeichnung Rohlinge jetzt.
Hier ist, wie ich mich anschließen :
HttpsURLConnection conn;
conn = (HttpsURLConnection) (new URL(mURL)).openConnection();
conn.setConnectTimeout(20000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
String tempString = toString(conn.getInputStream());
InformationsquelleAutor Chrispix | 2011-07-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lösung von @Chrispix ist gefährlich! Vertrauen alle Zertifikate, die mit niemandem zu tun, ein Mann in der Mitte Angriff! Senden Sie einfach ein beliebiges Zertifikat an den client, und Sie wird es akzeptieren!
Fügen Sie Ihre Zertifikat(en), um eine benutzerdefinierte trust-manager wie in diesem post beschrieben: Vertrauen allen Zertifikaten mit HttpClient über HTTPS
Obwohl es ein wenig komplexer zum herstellen einer sicheren Verbindung mit einer eigenen Zertifikats, wird es bringen Sie die gewünschte ssl-Verschlüsselung-Sicherheit ohne die Gefahr von man in the middle attack!
Die Annahme JEDES Zertifikat ist nur eine Möglichkeit für ein proof-of-concept-test, wo die SSL-Verbindung nicht der Teil, den Sie testen möchten. Sonst werden Sie nicht haben, um SSL zu verwenden, wenn Sie jedes Zertifikat akzeptieren, da die Verbindung nicht sicher ist!
Ah, tut mir Leid, ich denke, es ist ein Missverständnis - ich Stimme völlig, dass niemand sollte jemals jedes Zertifikat akzeptieren! 🙂 Mein Kommentar war in Bezug auf deinen 2. Absatz - der Vorschlag für die Verwendung einer benutzerdefinierten trust-manager - was IMHO sollte das Letzte Mittel sein workaround anstatt einer empfohlenen Lösung.
Jut ein heads-up.. ich entfernt die 'Lösung' habe ich eingefügt als ein work-around, um nicht dazu führen, mehr Probleme, weil die Leute nicht sehen es als eine 'vorübergehende'.
Sie sollten nicht entfernt haben, die teilweise zu beheben, ist es gut nur für Testzwecke
InformationsquelleAutor Matthias B
Im Gegensatz zu den akzeptierte Antwort, die Sie nicht müssen einen benutzerdefinierten trust-manager, müssen Sie fixieren Sie Ihre server-Konfiguration!
Traf ich das gleiche problem beim herstellen einer Verbindung zu einem Apache-server mit einer falsch installiert dynadot/alphassl Zertifikat. Ich bin die Verbindung mittels HttpsUrlConnection (Java/Android), das war zu werfen -
Das eigentliche problem ist eine server-Fehlkonfiguration - testen Sie es mit http://www.digicert.com/help/ oder ähnlich, und es wird Ihnen sogar die Lösung:
"Das Zertifikat ist nicht signiert, die von einer vertrauenswürdigen Zertifizierungsstelle (Prüfung gegen Mozilla-root-store). Wenn Sie kaufte das Zertifikat von einer vertrauenswürdigen Autorität, Sie vermutlich einfach zu installieren, müssen ein oder mehrere Zwischenzertifikate. Kontaktieren Sie Ihren Zertifikat-Anbieter für Hilfe, dies zu tun für Ihre server-Plattform."
Können Sie auch überprüfen Sie das Zertifikat mit openssl:
openssl s_client -debug -connect www.thedomaintocheck.com:443
Werden Sie wahrscheinlich finden Sie unter:
Verify return code: 21 (unable to verify the first certificate)
und früher in der Ausgabe:
Die Zertifikatkette enthält nur 1 element (Ihr Zertifikat):
... aber sollte der Verweis auf die Unterzeichnung Behörden in einer Kette wieder auf eine, die vertrauenswürdigen von Android (Verisign, GlobalSign, etc):
Anweisungen (und die intermediate-Zertifikate) für die Konfiguration Ihres Servers werden in der Regel von der Behörde, die Ihr Zertifikat ausgestellt, zum Beispiel: http://www.alphassl.com/support/install-root-certificate.html
Nach der Installation der Zwischenzertifikate von meinem Zertifikat Emittent ich habe jetzt keine Fehler bei der Verbindung mittels HttpsUrlConnection.
Ihre Lösung funktioniert, keine Frage, aber meinst du nicht, es ist eher ein workaround als eine Lösung für die Ursache? Wenn ich eine Verbindung zu einem server von 3 clients (Android, iOS, Windows Mobile), dann muss ich die Problemumgehung anwenden, die auf alle 3, in der Erwägung, dass kann ich fix den server einmal und Sie werden alle zu "einfach funktionieren".
Danke Stevie, ich hatte meinen server falsch konfiguriert für 3 Monate, und erst jetzt habe ich erkannt! Nun meine android-app funktioniert 100%
Ich mache viele Anrufe auf verschiedene APIs, die die gleiche Domäne, aber nur einer von Ihnen schlägt mit (javax.net.ssl.SSLHandshakeException) ... keine Ahnung, warum so etwas passieren würde? und übrigens, das SSL-Zertifikat nicht vertrauenswürdig ist. So, ich dachte, dass all die Gespräche scheitern soll, mit der gleichen Ausnahme.
get-in-touch mit, wer besitzt den server und sagen Sie Ihnen, Ihre config ist gebrochen und Ihre https funktioniert nicht richtig - geben Sie diesem link, um es zu beweisen digicert.com/help ... ich kann mir vorstellen, Sie würden dankbar sein, und schnell zu beheben. Ansonsten müssen Sie nehmen Sie die Problemumgehung Schritte in die anderen Antworten, aber dann musst du entweder akzeptieren keine Sicherheit (ignore CERT) oder bereitstellen Ihrer apps, wenn das Zertifikat abgelaufen ist und Ihr benutzerdefinierter trust-store nicht mehr passt das neue cert.
InformationsquelleAutor Stevie
Dem Sie Vertrauen können bestimmten Zertifikats während der Laufzeit.
Einfach herunterladen vom server, setzen Sie in Vermögenswerte und laden, wie dies mit ssl-utils-android:
In dem Beispiel oben habe ich verwendet
OkHttpClient
aberSSLContext
verwendet werden können mit einem beliebigen client in Java.Wenn Sie irgendwelche Fragen haben, fühlen Sie sich frei, zu Fragen. Ich bin der Autor dieses kleinen Bibliothek.
InformationsquelleAutor klimat
Update basiert auf der neuesten Android-Dokumentation (März 2017):
Wenn Sie diese Art von Fehler:
könnte das Problem Folgendes sein:
Die Lösung ist, um zu lehren
HttpsURLConnection
zu Vertrauen, die einen bestimmten Satz von CAs. Wie? Bitte überprüfen Sie https://developer.android.com/training/articles/security-ssl.html#CommonProblemsAndere, die
AsyncHTTPClient
auscom.loopj.android:android-async-http
library, überprüfen Sie bitte Setup AsyncHttpClient, HTTPS zu verwenden.Für okhttp, pls check @mklimek Antwort.
InformationsquelleAutor user1506104
Antworten auf sehr alte post. Aber vielleicht wird es helfen, einige newbie und wenn nicht der oben genannten arbeiten aus.
Erklärung: ich weiß, will keiner Erklärung Mist, sondern die Lösung. Aber in einem liner, die Sie zugreifen möchten, ein service von Ihrem lokalen Rechner auf einen remote-Maschine, die nicht das Vertrauen Ihrer Maschine. Sie verlangen müssen um zu gewinnen das Vertrauen von remote-server.
Lösung: Die folgende Lösung geht davon aus, dass Sie die folgenden Bedingungen erfüllt
Schritte:
Benötigen Sie ein .keystore Datei-Erweiterung zur Anmeldung Ihrer app. Wenn Sie nicht wissen, wie Sie zu erstellen .keystore-Datei, dann Folgen Sie zusammen mit den folgenden Abschnitt Erstellen .keystore-Datei oder andernfalls überspringen Sie den nächsten Abschnitt Signieren der Apk-Datei
Erstellen .keystore-Datei
Öffnen Sie Android Studio. Klicken Sie oben im Menü Build > Generate Signed APK. Im nächsten Fenster klicken Sie auf die Erstellen... - Taste. In dem neuen Fenster, bitte geben Sie in Daten in alle Felder ein. Erinnere mich an die zwei Passwort-Feld empfehle ich, sollte das gleiche Kennwort haben; verwenden Sie nicht verschiedene Passwort; und auch daran denken, die speichern-Pfad im oberen Bereich - Taste Speicher-Pfad:. Nachdem Sie die Eingabe aller Feld klicken Sie auf OK.
Signieren Der Apk-Datei
Nun müssen Sie erstellen eine signierte app mit der .keystore-Datei, die Sie gerade erstellt haben. Gehen Sie folgendermaßen vor
Choose existing...
TasteKey store password
undKey password
Felder. Auch geben Sie den aliasbuild.gradle
Dateien, die Sie benötigen, zu wählenBuild Types
undFlavors
.Build Types
wählen Sierelease
aus der dropdown -Für
Flavors
aber es wird, hängt von Ihren Einstellungen inbuild.gradle
- Datei. Wählen Siestaging
aus diesem Bereich. Ich habe folgende Einstellungen in derbuild.gradle
, die Sie verwenden können, die gleichen wie meine, aber stellen Sie sicher, dass dieapplicationId
zu Ihrem Paket-NamenKlicken Sie auf die unteren zwei
Signature Versions
Kontrollkästchen und klicken Sie aufFinish
- Taste.Fast Da:
All die harte Arbeit ist getan, nun ist die Bewegung der Wahrheit. Inorder, um den Zugriff auf die Staging-server-unterstützt durch proxy, müssen Sie einige Einstellungen in Ihrem realen Tests von Android-Geräten.
Proxy-Einstellung in Android-Gerät:
Modify network
Advanced options
wenn Sie nicht sehen können, dieProxy Hostname
FeldProxy Hostname
geben Sie die host-IP oder den Namen, den Sie anschließen möchten. Eine typische staging-server den Namen desstg.api.mygoodcompany.com
9502
Save
TasteEinem Letzten Stopp:
Erinnern wir erzeugt die signierte apk-Datei in Signieren der APK-Datei Abschnitt. Jetzt ist die Zeit, Sie zu installieren, die APK-Datei.
adb install
name of the apk file
adb command not found
. Geben Sie den vollständigen Pfad wieC:\Users\shah\AppData\Local\Android\sdk\platform-tools\adb.exe
install
name of the apk file
Ich hoffe, dass das problem gelöst werden könnte. Wenn nicht, bitte lassen Sie mir einen Kommentar.
Salam!
InformationsquelleAutor HA S
Die Fehlermeldung die ich bekam war ähnlich, aber der Grund war, dass das selbst unterzeichnete Zertifikat war abgelaufen.
Wenn die openssl-client versucht wurde, das gab mir den Grund, der übersehen wurde, wenn ich war die überprüfung der Zertifikats-dialog von firefox.
So im Allgemeinen, wenn das Zertifikat gibt es in den Schlüsselspeicher und seine "GÜLTIG", dieser Fehler wird off gehen.
TrustManager
und verwenden Sie einen anderen Satz von Kriterien. Aber out of the box, das ist, was Sie haben, mit zu arbeiten.InformationsquelleAutor MPN
Ich hatte das gleiche problem beim verbinden von Android-client Kurento server.
Kurento server verwenden jks-Zertifikate, also musste ich umwandeln pem-zu.
Als Eingabe für die Konvertierung, die ich verwendet, cert.pem-Datei und führen zu solchen Fehlern.
Aber wenn die Verwendung fullchain.pem - statt cert.pem - - alles OK.
InformationsquelleAutor V.Poddubchak
Ich hatte das gleiche problem, was ich fand, war, dass das Zertifikat .crt-Datei, die ich zur Verfügung gestellt, fehlt ein Zwischenzertifikat. Also fragte ich alle .crt-Dateien von meinem server-admin, dann aneinandergehängt Sie in umgekehrter Reihenfolge.
Ex.
1. Root.crt
2. Inter.crt
3. myCrt.crt
in windows habe ich ausgeführt
kopieren Inter.crt + Root.crt newCertificate.crt
(Hier habe ich ignoriert myCrt.crt)
Dann gab ich newCertificate.crt-Datei in code per inputstream.
Arbeit.
InformationsquelleAutor sahan maldeniya
Ich weiß, dass Sie nicht brauchen, um Vertrauen allen Zertifikaten aber in meinem Fall hatte ich Probleme mit einigen debugging-Umgebungen, in denen wir hatte die selbst-signierte Zertifikate, und ich brauchte eine schmutzige Lösung.
Alle die ich tun musste, war die änderung der Initialisierung des
sslContext
wo
trustAllCerts
wurde wie folgt erstellt:Hoffen, dass dies in handliches kommen.
Ich bekomme Fehler
Hostname '192.168.0.16' was not verified
. Ich bin meine Prüfung webapi über mein debugger (IIS Express) vor Ort. Irgendeine Idee, wie man dieses Problem beheben? Vielen Dank 🙂InformationsquelleAutor Adrian C.
Wenn Sie nachrüsten, müssen Sie passen Sie Ihre OkHttpClient.
InformationsquelleAutor Shihab Uddin
Den Vertrauensanker Fehler können passieren, für eine Vielzahl von Gründen. Für mich war es einfach so, dass ich zugreifen wollte
https://example.com/
statthttps://www.example.com/
.So möchten Sie vielleicht überprüfen Sie Ihre URLs, bevor Sie beginnen, bauen Ihre eigenen Trust-Manager (wie ich).
InformationsquelleAutor Unkulunkulu
In Lebkuchen-Telefone, bekomme ich immer diese Fehlermeldung:
Trust Anchor not found for Android SSL Connection
, auch wenn ich das setup zu verlassen, auf mein Zertifikat.Hier ist der code, den ich verwenden (in der Scala-Sprache):
und hier ist die Verbindung code:
Grundsätzlich richte ich Vertrauen auf meine benutzerdefinierte Zertifikat. Wenn das fehlschlägt, dann kann ich deaktivieren Sie die Sicherheit. Dies ist nicht die beste option, aber die einzige Wahl die ich kenne mit alten und buggy-Handys.
Diesem Beispiel-code, kann leicht übersetzt werden in Java.
InformationsquelleAutor david.perez
In meinem Fall war dies geschehen, nachdem update auf Android 8.0. Das selbst-signierte Zertifikat Android wurde eingestellt, um Vertrauen wurde mit Signatur-Algorithmus SHA1withRSA. Die Umstellung auf ein neues cert, mit Signatur-Algorithmus SHA256withRSA das problem behoben.
InformationsquelleAutor Zds
InformationsquelleAutor Dayanand Waghmare