J'essaie de me connecter à une boîte IIS6 exécutant un certificat SSL godaddy 256 bits et j'obtiens l'erreur:
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
J'ai essayé de déterminer ce qui pouvait en être la cause, mais en train de dessiner des blancs en ce moment.
Voici comment je me connecte:
HttpsURLConnection conn;
conn = (HttpsURLConnection) (new URL(mURL)).openConnection();
conn.setConnectTimeout(20000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
String tempString = toString(conn.getInputStream());
la source
Contrairement à la réponse acceptée, vous n'avez pas besoin d'un gestionnaire de confiance personnalisé, vous devez corriger la configuration de votre serveur!
J'ai rencontré le même problème lors de la connexion à un serveur Apache avec un certificat dynadot / alphassl mal installé. Je me connecte en utilisant HttpsUrlConnection (Java / Android), qui lançait -
Le problème réel est une mauvaise configuration du serveur - testez-le avec http://www.digicert.com/help/ ou similaire, et il vous indiquera même la solution:
"Le certificat n'est pas signé par une autorité de confiance (vérification par rapport au magasin racine de Mozilla). Si vous avez acheté le certificat auprès d'une autorité de confiance, il vous suffit probablement d'installer un ou plusieurs certificats intermédiaires . Contactez votre fournisseur de certificats pour obtenir de l'aide. plate-forme serveur. "
Vous pouvez également vérifier le certificat avec openssl:
openssl s_client -debug -connect www.thedomaintocheck.com:443
Vous verrez probablement:
Verify return code: 21 (unable to verify the first certificate)
et, plus tôt dans la sortie:
La chaîne de certificats ne contiendra qu'un seul élément (votre certificat):
... mais devrait renvoyer les autorités signataires d'une chaîne à une chaîne approuvée par Android (Verisign, GlobalSign, etc.):
Les instructions (et les certificats intermédiaires) pour la configuration de votre serveur sont généralement fournies par l'autorité qui a émis votre certificat, par exemple: http://www.alphassl.com/support/install-root-certificate.html
Après avoir installé les certificats intermédiaires fournis par mon émetteur de certificat, je n'ai plus d'erreurs lors de la connexion à l'aide de HttpsUrlConnection.
la source
Vous pouvez faire confiance à un certificat particulier au moment de l'exécution.
Téléchargez-le simplement à partir du serveur, insérez des actifs et chargez-le comme ceci en utilisant ssl-utils-android :
Dans l'exemple ci-dessus, j'ai utilisé
OkHttpClient
maisSSLContext
peut être utilisé avec n'importe quel client en Java.Si vous avez des questions, n'hésitez pas à les poser. Je suis l'auteur de cette petite bibliothèque.
la source
Mise à jour basée sur la dernière documentation Android (mars 2017):
Lorsque vous obtenez ce type d'erreur:
le problème peut être l'un des suivants:
La solution consiste à apprendre
HttpsURLConnection
à faire confiance à un ensemble spécifique d'autorités de certification. Comment? Veuillez vérifier https://developer.android.com/training/articles/security-ssl.html#CommonProblemsPour les autres utilisateurs
AsyncHTTPClient
de lacom.loopj.android:android-async-http
bibliothèque, veuillez vérifier Setup AsyncHttpClient pour utiliser HTTPS .la source
Si vous utilisez la mise à niveau, vous devez personnaliser votre OkHttpClient.
la source
getUnsafeOkHttpClient()
dans Kotlin: stackoverflow.com/a/60507560/2914140 .En réponse à un très ancien message. Mais peut-être que cela aidera certains débutants et si aucune des réponses ci-dessus ne fonctionne.
Explication: Je sais que personne ne veut de la merde d'explication; plutôt la solution. Mais dans une seule ligne, vous essayez d'accéder à un service de votre machine locale vers une machine distante qui ne fait pas confiance à votre machine. Vous demandez besoin d'obtenir la confiance du serveur distant.
Solution: la solution suivante suppose que les conditions suivantes sont remplies
Pas:
Vous avez besoin d'un fichier d'extension .keystore pour inscrire votre application. Si vous ne savez pas comment créer un fichier .keystore; puis suivez la section suivante Créer un fichier .keystore ou passez à la section suivante Signer un fichier Apk
Créer un fichier .keystore
Ouvrez Android Studio. Cliquez sur le menu du haut Créer> Générer un APK signé. Dans la fenêtre suivante cliquez sur le Créer un nouveau ... bouton. Dans la nouvelle fenêtre, veuillez saisir des données dans tous les champs. Rappelez-vous que les deux champs de mot de passe que je recommande devraient avoir le même mot de passe; n'utilisez pas de mot de passe différent; et rappelez-vous également le chemin de sauvegarde en haut de la plupart des champs Chemin du magasin de clés: . Après avoir entré tout le champ, cliquez sur le bouton OK.
Signer le fichier Apk
Vous devez maintenant créer une application signée avec le fichier .keystore que vous venez de créer. Suivez ces étapes
Choose existing...
boutonKey store password
etKey password
. Saisissez également l'aliasbuild.gradle
fichiers, vous devez sélectionnerBuild Types
etFlavors
.Build Types
choixrelease
dans la liste déroulanteCar
Flavors
cependant cela dépendra de vos paramètres dans lebuild.gradle
fichier. Choisissezstaging
dans ce champ. J'ai utilisé les paramètres suivants dans lebuild.gradle
, vous pouvez utiliser le même que le mien, mais assurez-vous de changer le nomapplicationId
de votre packageCochez les deux
Signature Versions
cases du bas et cliquez sur leFinish
bouton.Presque là:
Tout le travail est fait, maintenant le mouvement de la vérité. Afin d'accéder au serveur Staging sauvegardé par proxy, vous devez effectuer des réglages dans vos vrais appareils Android de test.
Paramètre proxy dans l'appareil Android:
Modify network
Advanced options
si vous ne pouvez pas voir leProxy Hostname
champProxy Hostname
entrez l'adresse IP ou le nom de l'hôte que vous souhaitez connecter. Un serveur intermédiaire typique sera nommé commestg.api.mygoodcompany.com
9502
Save
boutonUn dernier arrêt:
N'oubliez pas que nous avons généré le fichier apk signé dans la section Signer le fichier APK . Il est maintenant temps d'installer ce fichier APK.
adb install
name of the apk file
adb command not found
. Entrez le chemin complet commeC:\Users\shah\AppData\Local\Android\sdk\platform-tools\adb.exe
install
name of the apk file
J'espère que le problème pourra être résolu. Sinon, laissez-moi un commentaire.
Salam!
la source
Le message d'erreur que j'obtenais était similaire, mais la raison était que le certificat auto-signé avait expiré. Lorsque le client openssl a été tenté, il m'a donné la raison qui a été négligée lorsque je vérifiais la boîte de dialogue de certificat de Firefox.
Donc en général, si le certificat est là dans le keystore et son "VALID", cette erreur se produira.
la source
TrustManager
et utiliser un ensemble différent de critères. Mais dès le départ, c'est ce avec quoi vous devez travailler.J'ai eu le même problème lors de la connexion du client Android au serveur Kurento. Le serveur Kurento utilise des certificats jks, j'ai donc dû convertir pem en lui. Comme entrée pour la conversion, j'ai utilisé le fichier cert.pem et cela a conduit à de telles erreurs. Mais si l' utilisation fullchain.pem au lieu de cert.pem - tout est OK.
la source
Utilisez https://www.ssllabs.com/ssltest/ pour tester un domaine.
La solution de Shihab Uddin à Kotlin.
la source
J'ai eu le même problème que j'ai trouvé, c'est que le fichier de certificat .crt que j'ai fourni manquait un certificat intermédiaire. J'ai donc demandé tous les fichiers .crt à l'administrateur de mon serveur, puis les ai concaténés dans l'ordre inverse.
Ex. 1. Root.crt 2. Inter.crt 3. myCrt.crt
dans Windows, j'ai exécuté la copie Inter.crt + Root.crt newCertificate.crt
(Ici, j'ai ignoré myCrt.crt)
Ensuite, j'ai fourni le fichier newCertificate.crt dans le code via le flux d'entrée. Travail effectué.
la source
L'erreur d'ancrage de confiance peut se produire pour de nombreuses raisons. Pour moi, c'était simplement que j'essayais d'accéder
https://example.com/
au lieu dehttps://www.example.com/
.Vous voudrez peut-être revérifier vos URL avant de commencer à créer votre propre Trust Manager (comme je l'ai fait).
la source
Dans les téléphones Gingerbread, j'obtiens toujours cette erreur:
Trust Anchor not found for Android SSL Connection
même si je me fie à mon certificat.Voici le code que j'utilise (en langage Scala):
et voici le code de connexion:
Fondamentalement, je configure pour faire confiance à mon certificat personnalisé. Si cela échoue, je désactive la sécurité. Ce n'est pas la meilleure option, mais le seul choix que je connaisse avec les téléphones anciens et bogués.
Cet exemple de code peut être facilement traduit en Java.
la source
Dans mon cas, cela se produisait après la mise à jour vers Android 8.0. Le certificat auto-signé qu'Android a été configuré pour faire confiance utilisait l'algorithme de signature SHA1withRSA. Le passage à un nouveau certificat à l'aide de l'algorithme de signature SHA256withRSA a résolu le problème.
la source
Je sais que vous n'avez pas besoin de faire confiance à tous les certificats, mais dans mon cas, j'ai eu des problèmes avec certains environnements de débogage où nous avions des certificats auto-signés et j'avais besoin d'une solution sale.
Tout ce que j'avais à faire était de changer l'initialisation du
sslContext
où a
trustAllCerts
été créé comme ceci:J'espère que cela vous sera utile.
la source
Hostname '192.168.0.16' was not verified
. Je teste mon webapi via mon débogueur (IIS Express) localement. Une idée de comment résoudre ce problème? Merci :)J'ai eu un problème similaire et j'ai complètement exclu la stratégie de faire confiance à toutes les sources.
Je partage ici ma solution appliquée à une application implémentée dans Kotlin
Je recommanderais d'abord d'utiliser le site Web suivant pour obtenir des informations sur le certificat et sa validité
S'il n'apparaît pas comme `` émetteurs acceptés '' dans le magasin de confiance par défaut d'Android , nous devons obtenir ce certificat et l'incorporer dans l'application pour créer un magasin de confiance personnalisé
La solution idéale dans mon cas était de créer un gestionnaire de confiance de haut niveau qui combine le magasin de confiance par défaut personnalisé et Android
Ici, il expose le code de haut niveau utilisé pour configurer le OkHttpClient qu'il a utilisé avec Retrofit.
De cette façon, je pourrais communiquer avec le serveur avec un certificat auto-signé et avec d'autres serveurs avec un certificat émis par une entité de certification de confiance
Ça y est, j'espère que ça peut aider quelqu'un.
la source
Je sais que c'est un très vieil article, mais je suis tombé sur cet article en essayant de résoudre mes problèmes d'ancrage de confiance. J'ai posté comment je l'ai corrigé. Si vous avez pré-installé votre autorité de certification racine, vous devez ajouter une configuration au manifeste.
https://stackoverflow.com/a/60102517/114265
la source
la source
J'ai également rencontré le même problème. Je supprime simplement hhtps vers http, comme
final public static String ROOT_URL = "https://example.com";
àfinal public static String ROOT_URL = "http://example.com";
Enfin, j'ai résolu ce problème.
la source