Je fais un message https et je reçois une exception de certificat de serveur non approuvé d'exception SSL. Si je fais du http normal, cela fonctionne parfaitement. Dois-je accepter le certificat du serveur d'une manière ou d'une autre?
101
Réponses:
Je fais une supposition, mais si vous voulez qu'une véritable poignée de main se produise, vous devez informer Android de votre certificat. Si vous voulez simplement accepter quoi qu'il arrive, utilisez ce pseudo-code pour obtenir ce dont vous avez besoin avec le client HTTP Apache:
CustomSSLSocketFactory:
FullX509TrustManager est une classe qui implémente javax.net.ssl.X509TrustManager, mais aucune des méthodes n'effectue réellement de travail, obtenez un exemple ici .
Bonne chance!
la source
FullX509TrustManager
C'est ce que je fais. Il ne vérifie tout simplement plus le certificat.
et
la source
javax.net.ssl.SSLException: Received fatal alert: bad_record_mac
. J'ai également essayé de remplacerTLS
parSSL
mais cela n'a pas aidé. S'il vous plaît, aidez-moi, merciEn essayant de répondre à cette question, j'ai trouvé un meilleur tutoriel. Avec lui, vous n'avez pas à compromettre la vérification du certificat.
http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html
* Je n'ai pas écrit ceci mais merci à Bob Lee pour le travail
la source
Vous pouvez également consulter mon article de blog, très similaire à crazybobs.
Cette solution ne compromet pas non plus la vérification des certificats et explique comment ajouter les certificats de confiance dans votre propre keystore.
http://blog.antoine.li/index.php/2010/10/android-trusting-ssl-certificates/
la source
http://madurangasblogs.blogspot.in/2013/08/avoiding-javaxnetsslsslpeerunverifiedex.html
Gracieuseté de Maduranga
Lors du développement d'une application utilisant https, votre serveur de test ne dispose pas d'un certificat SSL valide. Parfois, le site Web utilise un certificat auto-signé ou le site Web utilise un certificat SSL gratuit. Donc, si vous essayez de vous connecter au serveur en utilisant Apache
HttpClient
, vous obtiendrez une exception indiquant que le "pair non authentifié". Bien que faire confiance à tous les certificats d'un logiciel de production ne soit pas une bonne pratique, vous devrez peut-être le faire en fonction de la situation. Cette solution résout l'exception provoquée par «pair non authentifié».Mais avant de passer à la solution, je dois vous avertir que ce n'est pas une bonne idée pour une application de production. Cela enfreindra l'objectif de l'utilisation d'un certificat de sécurité. Donc, sauf si vous avez une bonne raison ou si vous êtes sûr que cela ne posera aucun problème, n'utilisez pas cette solution.
Normalement, vous créez un
HttpClient
comme celui-ci.HttpClient httpclient = new DefaultHttpClient();
Mais vous devez changer la façon dont vous créez le HttpClient.
Vous devez d'abord créer une extension de classe
org.apache.http.conn.ssl.SSLSocketFactory
.Ensuite, créez une méthode comme celle-ci.
Ensuite, vous pouvez créer le fichier
HttpClient
.HttpClient httpclient = getNewHttpClient();
Si vous essayez d'envoyer une demande de publication sur une page de connexion, le reste du code ressemblerait à ceci.
Vous obtenez la page html dans InputStream. Ensuite, vous pouvez faire ce que vous voulez avec la page html renvoyée.
Mais ici, vous serez confronté à un problème. Si vous souhaitez gérer une session à l'aide de cookies, vous ne pourrez pas le faire avec cette méthode. Si vous souhaitez obtenir les cookies, vous devrez le faire via un navigateur. Alors seulement vous recevrez des cookies.
la source
Si vous utilisez un certificat StartSSL ou Thawte, il échouera pour Froyo et les versions antérieures. Vous pouvez utiliser le référentiel CAcert d' une version plus récente au lieu d'approuver chaque certificat.
la source
Aucun de ceux-ci n'a fonctionné pour moi (aggravé par le bogue Thawte également). Finalement, je l'ai réparé avec l'acceptation SSL auto-signé sur Android et la gestion SSL personnalisée a cessé de fonctionner sur Android 2.2 FroYo
la source
Aucune de ces réponses n'a fonctionné pour moi, voici donc un code qui fait confiance à tous les certificats.
la source
Je ne connais pas les spécificités d'Android pour les certificats SSL, mais il serait logique qu'Android n'accepte pas un certificat SSL auto-signé dès le départ. J'ai trouvé ce post sur les forums Android qui semble résoudre le même problème: http://androidforums.com/android-applications/950-imap-self-signed-ssl-certificates.html
la source
Il s'agit d'un problème connu avec Android 2.x. Je luttais avec ce problème pendant une semaine jusqu'à ce que je tombe sur la question suivante, qui non seulement donne un bon aperçu du problème, mais fournit également une solution fonctionnelle et efficace dépourvue de toute faille de sécurité.
Erreur `` Pas de certificat de pair '' dans Android 2.3 mais PAS dans 4
la source
Pour une raison quelconque, la solution mentionnée pour httpClient ci-dessus n'a pas fonctionné pour moi. À la fin, j'ai pu le faire fonctionner en remplaçant correctement la méthode lors de l'implémentation de la classe SSLSocketFactory personnalisée.
C'est ainsi que cela a parfaitement fonctionné pour moi. Vous pouvez voir la classe personnalisée complète et l'implémentation sur le fil suivant: http://blog.syedgakbar.com/2012/07/21/android-https-and-not-trusted-server-certificate-error/
la source
Je fais ce cours et j'ai trouvé
dans ton code blanc
la source
Sources qui m'ont aidé à travailler avec mon certificat auto-signé sur mon serveur AWS Apache et à me connecter avec HttpsURLConnection à partir d'un appareil Android:
SSL sur l'instance aws - tutoriel amazon sur ssl
Android Security avec HTTPS et SSL - création de votre propre gestionnaire de confiance sur le client pour l'acceptation votre certificat Création d' un certificat
auto-signé - script facile pour créer vos certificats
Ensuite, j'ai fait ce qui suit:
create_my_certs.sh
:bash create_my_certs.sh yourdomain.com
Placez les certificats à leur place sur le serveur (vous pouvez trouver la configuration dans /etc/httpd/conf.d/ssl.conf). Tous ceux-ci doivent être définis:
SSLCertificateFile
SSLCertificateKeyFile
SSLCertificateChainFile
SSLCACertificateFile
Redémarrez httpd en utilisant
sudo service httpd restart
et assurez-vous que httpd a démarré:Arrêt de httpd: [OK]
Démarrage de httpd: [OK]
Copier
my-private-root-ca.cert
dans le dossier des actifs de votre projet AndroidCréez votre gestionnaire de confiance:
SSLContext SSLContext;
CertificateFactory cf = CertificateFactory.getInstance ("X.509"); InputStream caInput = context.getAssets (). Open ("ma-racine-privée-ca.cert.pem"); Certificat ca; essayez {ca = cf.generateCertificate (caInput); } enfin {caInput.close (); }
Et établissez la connexion en utilisant HttpsURLConnection:
Connexion HttpsURLConnection = (HttpsURLConnection) url.openConnection (); connection.setSSLSocketFactory (SSLContext.getSocketFactory ());
Thats it, essayez votre connexion https.
la source
Vous pouvez probablement essayer quelque chose comme ça. Cela m'a aidé
la source
Utilisez simplement cette méthode comme HTTPClient:
la source