java.de sécurité.cert.CertPathValidatorException: ancre de Confiance pour le chemin d'accès de certification n'a pas trouvé. Android 2.3
Dans mon serveur (serveur de production), j'ai un goDaddy certificat ssl.
J'ai deux applications iOS et Android connexion avec le serveur, iOS connecter sans problèmes, android avec les versions 4.* tout est bon, mais avec des appareils avec 2.3.* J'ai toujours été un SSLHandshakeException.
J'ai fait exactement comme sur Android, les Développeurs de page (https://developer.android.com/training/articles/security-ssl.html).
Je l'ai déjà vu de semblables discussions ici dans stackoverflow ( ici ), mais aucune aide.
Puis j'ai vu cette thread parle Étendu l'Utilisation de la Clé, mais lors du débogage-je obtenir les informations suivantes:
[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" ]
Donc je suppose que le certificat n'est pas "forcer" prolongation de l'Utilisation de la Clé.
Également sur cette thread il y a quelques autres causes possibles comme la date/le temps d'être complètement mauvais, qui sont tous inexistant.
De prendre en compte, maintenant, je ne sais pas d'où peut être le problème.
Des suggestions?
EDIT:
StackTrace ci-dessous:
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)
Quelle est l'URL du serveur?
Aussi, vous pouvez obtenir gratuitement un StartCom de Classe 1 serveur cert approuvée par la plupart des ordinateurs de bureau et les navigateurs mobiles. Il comprend iOS 2.0 et Ansdroid 2.2. Voir StartSSL Comparaison Graphique et Liste des versions de navigateur avec StartCom certs. Si vous avez besoin d'un générique, puis vous devrez l'acheter.
désolé, je ne veux pas m'identifier et/ou de mon entreprise, donc je ne me sens pas à l'aise à le montrer. Mais pouvez-vous me dire c'était quoi l'idée? J'ai déjà acheté un certificat goDaddy, donc il n'y aurait aucun intérêt à en acheter un autre.
Startcom et CAcert les certificats de Classe 1 sont gratuit. Je veux voir la sortie de
openssl s_client -connect <server>:<port>
pour vous assurer de l'envoi d'un valide de la chaîne.OriginalL'auteur joseph | 2014-08-04
Vous devez vous connecter pour publier un commentaire.
Il ressemble à l'émetteur de votre certificat n'est pas dans le magasin de confiance de la 2.3 dispositifs.
Prendre un coup d'oeil à la racine et intermédiaires de l'autorité de certification de votre certificat GoDaddy et de vérifier si les certificats sont présents sur votre 2.3 appareil.
Voir http://www.andreabaccega.com/blog/2010/09/23/android-root-certification-authorities-list/ pour l'obtention d'une liste de 2,3 certificats.
Lorsque seule l'autorité de certification racine est disponible, assurez-vous que votre serveur web sert également les certificats intermédiaires sur demande.
Qu'est-ce que l'url de votre serveur? Puis-je y accéder? Vous parlez d'une trustmanager sur le serveur ou dans votre Application Android?
nous avons besoin de l'adresse URL du serveur, et de votre code qui construit le
SSLContext
. Son genre de ridicule que vous ne fournissez pas toutes les informations. Comment voulez-vous que la communauté de vous aider? La question pourrait être fermé: Fermer la raison quand délibérément fourni des informations inexactes?.Il semble que le problème est que lors de l'exécution du code à partir d'Android Développement de la Documentation (dans l'Inconnu "autorité de certification") était à l'origine de l'erreur. Je l'ai enlevé et il est en train de travailler sur tous les appareils. J'ai marqué que cette réponse est la bonne, parce qu'en fait, le code était en train de changer mon appareil CA. @sauteur avec slalom, comme je l'ai dit, mon code était exactement comme sur Android Documentation, et a fourni le lien. Je suis libre de ne pas vous donner le lien, en fournissant des informations incorrectes est très différent de ne pas fournir certains renseignements. La comunauté était encore en mesure de m'aider, comme userM1433372 fait.
OriginalL'auteur userM1433372
Je suis passé par BEAUCOUP d'endroits dans la et le web pour résoudre cette chose.
C'est le code qui a fonctionné pour moi (Android 21):
app.certificateString
est une Chaîne qui contient le Certificat, par exemple:J'ai testé ce que vous pouvez mettre tous les caractères dans le certificat de chaîne, si elle est auto-signé, aussi longtemps que vous gardez la structure exacte ci-dessus.
J'ai obtenu le certificat de chaîne avec mon ordinateur portable, Terminal de la ligne de commande. Je vous besoin de connaître plus de détails, laissez-moi savoir.
Super Réponse, a très bien Fonctionné. Merci @Josh
OriginalL'auteur Josh
En cas de besoin de quelqu'un à la réponse, j'ai finalement trouvé la réponse après 2 jours de google. Fondamentalement, nous devons utiliser des TrustManager aux fiducies le CAs dans notre magasin de clés, c'est parce que dans Android 2.3.x, le fichier de clés n'est pas correctement utilisé. Crédit à https://github.com/delgurth pour la CustomTrustManager.
Veuillez consulter: https://github.com/ikust/hello-pinnedcerts/issues/2
KeyPinStore.java
CustomTrustManager.java
Pour l'utiliser, il suffit de faire la SSLSocketFactory et de l'appliquer, par exemple:
avec HttpsURLConnection
avec terrain de Volley -
OriginalL'auteur Newbie009