Connexion Https Android
Je suis en train de faire un post https et je me fais une exception de ssl exception Pas de confiance certificat de serveur. Si je n'http normal il fonctionne parfaitement bien. Dois-je accepter le certificat du serveur, en quelque sorte?
Puis-je obtenir des exemples de mise en œuvre de la même
peut ce thread aider, mais je ne peux pas dire si c'œuvres les plus récentes de l'API : groups.google.com/group/android-developers/browse_thread/thread/...
peut ce thread aider, mais je ne peux pas dire si c'œuvres les plus récentes de l'API : groups.google.com/group/android-developers/browse_thread/thread/...
OriginalL'auteur Sam97305421562 | 2009-06-15
Vous devez vous connecter pour publier un commentaire.
Je suis en train de faire une supposition, mais si vous voulez une véritable poignée de main à se produire, vous devez laisser android savoir de votre certificat. Si vous voulez juste accepter n'importe quoi, puis utiliser 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.le protocole ssl.X509TrustManager, mais aucune des méthodes d'effectuer un travail, obtenir un échantillon ici.
Bonne Chance!
Précisé dans le post. Vous avez besoin d'USINE pour les autres remplacer les méthodes d'un SocketFactory besoins pour créer un socket.
de retour à l'USINE.createSocket(); est d'avoir de problème. À la création de la socket est de donner une exception de Pointeur null sur execute(). Aussi, j'ai remarqué, il y a 2 SocketFactory classes. 1. org.apache.http.conn.le protocole ssl.SSLSocketFactory et 2. javax.net.le protocole ssl.SSLSocketFactory
Salut Nate, cela ressemble à quelque chose d'utile dans ma situation. Mais, je vais avoir des problèmes avec la prise de la CustomSSLSocketFactory. En quelle classe est-il censé s'étendre? Ou ce que l'interface est est-il censé mettre en œuvre? J'ai fait des expériences avec: javax.net.SocketFactory, javax.net.le protocole ssl.SSLSocketFactory, org.apache.http.conn.régime.SocketFactory, qui obligent la mise en œuvre d'autres méthodes... Donc, en général, ce sont les espaces de noms des classes utilisées dans votre code? Je vous remercie. 🙂
Ne fonctionne pas pour moi, me donne même Pas de confiance erreur de certificat de serveur.
OriginalL'auteur Nate
C'est ce que je suis en train de faire. Il n'a tout simplement pas vérifier le certificat plus.
et
je suis en train d'utiliser cette solution étape par étape et je suis cette exception: 07-25 12:35:25.941: ALERTER/Système.err(24383): java.lang.ClassCastException: org.apache.l'harmonie.luni.interne.net.www.le protocole.http.HttpURLConnectionImpl dans le lieu où je suis en train d'ouvrir la connexion... une idée de pourquoi??
Hey j'ai fait comme suggéré par vous, mais je suis l'exception, comme
javax.net.ssl.SSLException: Received fatal alert: bad_record_mac
. J'ai aussi essayé de remplacerTLS
avecSSL
mais il n'a pas aidé. Merci de m'aider, MerciAlors que c'est bon durant la phase de développement, vous devez être conscient du fait qu'il permet à quiconque de MITM votre connexion sécurisée par un semblant aléatoire certificat SSL, ce qui rend votre connexion n'est pas sécurisée plus. Jetez un oeil à cette question pour voir le chemin à droite, ici pour voir comment obtenir un certificat, et enfin ceci pour savoir comment l'ajouter au fichier de stockage des clés.
Vous ne devez pas utiliser ou recommander des post de ce code. Il est radicalement d'insécurité. Vous devez résoudre le problème.
OriginalL'auteur Ulrich Scheller
Tout en essayant de répondre à cette question, j'ai trouvé un meilleur tutoriel. Avec elle, 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 cela, mais merci à Bob Lee pour le travail
OriginalL'auteur bajohns
Vous pouvez également consulter mon article de blog, très semblable à crazybobs.
Cette solution est également à ne pas compromettre la vérification des certificats et explique comment ajouter la confiance des certs dans votre propre fichier de clés.
http://blog.antoine.li/index.php/2010/10/android-trusting-ssl-certificates/
OriginalL'auteur saxos
http://madurangasblogs.blogspot.in/2013/08/avoiding-javaxnetsslsslpeerunverifiedex.html
Courtoisie Maduranga
Lors du développement d'une application qui utilise le protocole https, votre serveur de test n'a pas un certificat SSL valide. Ou, parfois, le site web est d'utiliser un certificat auto-signé ou le site web est à l'aide de certificat SSL gratuit. Donc, si vous essayez de vous connecter au serveur à l'aide d'Apache
HttpClient
, vous obtiendrez une exception indiquant que le "peer pas authentifié". Si elle n'est pas une bonne pratique de faire confiance à tous les certificats dans un logiciel de production, vous pouvez avoir à le faire selon la situation.Cette solution résout l'exception provoquée par les "pairs non authentifié".
Mais avant d'aller à la solution, je dois vous avertir que ce n'est pas une bonne idée pour une application de production. Ce sera atteinte à l'objet de l'aide d'un certificat de sécurité. Donc, sauf si vous avez une bonne raison, ou si vous êtes sûr que cela ne cause aucun problème, n'utilisez pas cette solution.
Normalement, vous créer un
HttpClient
comme ça.HttpClient httpclient = new DefaultHttpClient();
Mais vous avez à changer la façon dont vous créez les HttpClient.
Vous devez d'abord créer une classe étendant
org.apache.http.conn.ssl.SSLSocketFactory
.Puis créer une méthode de ce genre.
Alors vous pouvez créer le
HttpClient
.HttpClient httpclient = getNewHttpClient();
Si vous essayez d'envoyer une requête post vers une page de connexion le reste du code sera comme ceci.
Vous obtenez la page html à l'InputStream. Ensuite, vous pouvez faire ce que vous voulez avec le retour de la page html.
Mais ici, vous ferez face à un problème. Si vous souhaitez gérer une session à l'aide de cookies, vous ne serez pas en mesure de le faire avec cette méthode. Si vous voulez obtenir les cookies, vous devrez le faire par l'intermédiaire d'un navigateur. Alors seulement vous recevrez des cookies.
Merci de votre solution a fonctionné! +1
OriginalL'auteur Rohit Mandiwal
Si vous utilisez un StartSSL ou certificat Thawte, ce sera un échec pour Froyo et les anciennes versions. Vous pouvez utiliser un nouvelle version du référentiel CAcert au lieu de faire confiance chaque certificat.
OriginalL'auteur Juan Sánchez
Aucun de ces fonctionné pour moi (aggravée par la Thawte bug ainsi). Finalement je l'ai fixé avec de la SSL auto-signé de l'acceptation sur Android et SSL personnalisé manipulation ne fonctionne plus sur Android 2.2 FroYo
OriginalL'auteur Adrian Spinei
Aucun de ces réponses n'a pas fonctionné pour moi, donc voici le code qui faire confiance à aucun des certificats.
Le constructeur SSLSocketFactory(null, null, null, null, null, X509HostnameVerifier) n'est pas défini
OriginalL'auteur Speise
Je ne sais pas à propos de l'Android spécificités pour les certificats ssl, mais il serait logique que Android ne sera pas accepter un certificat ssl auto-signé au large de la chauve-souris. J'ai trouvé ce post sur les forums android qui semble être portant sur le même sujet:
http://androidforums.com/android-applications/950-imap-self-signed-ssl-certificates.html
Méthode Http Post de travail pour la même ?
Comme je l'ai dit je ne connais pas le Android les détails mais j'ai de la journée que vous avez à dire à la plate-forme ce que le certificat ssl du serveur auquel vous vous connectez est. C'est si vous utilisez un auto-signé cert qui n'est pas reconnu par la plate-forme. Le SslCertificate classe sera probablement utile: developer.android.com/reference/android/net/http/... je vais creuser dans cette plus tard aujourd'hui, quand j'aurai plus de temps.
OriginalL'auteur Matti Lyra
C'est un problème connu avec Android 2.x. J'ai été aux prises avec ce problème pendant une semaine jusqu'à ce que je suis venu à travers la question suivante, qui non seulement donne un bon aperçu du problème, mais aussi fournit une solution efficace, dépourvue de tout trous de sécurité.
"Pas de certificat homologue" erreur dans le système d'exploitation Android 2.3, mais PAS dans le 4
OriginalL'auteur alumat
Pour une raison quelconque, la solution indiquée pour httpClient ci-dessus n'a pas fonctionné pour moi. À la fin, j'ai été capable de le faire fonctionner correctement substitution de la méthode lors de la mise en œuvre de la coutume SSLSocketFactory classe.
C'est la façon dont il a fonctionné parfaitement pour moi. Vous pouvez voir l'intégralité de classe personnalisée et la mise en œuvre sur le fil de discussion suivant:
http://blog.syedgakbar.com/2012/07/21/android-https-and-not-trusted-server-certificate-error/
OriginalL'auteur Syed Ghulam Akbar
- Je faire de cette classe et a trouvé
dans vous code blanc ce
OriginalL'auteur Erick Guardado
Sources qui m'ont permis d'apprendre à travailler avec mon certificat auto-signé sur mon AWS serveur Apache et de se connecter avec HttpsURLConnection à partir d'un appareil android:
SSL aws exemple - amazon tutoriel sur ssl
Android de Sécurité avec HTTPS et SSL - la création de votre propre confiance gestionnaire du client pour l'acceptation de votre certificat
La création d'un certificat auto-signé - facile de script pour la création de vos certificats
Puis j'ai fait la suivante:
create_my_certs.sh
:bash create_my_certs.sh yourdomain.com
Place les certificats à leur place sur le serveur (vous pouvez trouver la configuration dans /etc/httpd/conf.d/ssl.conf). Toutes ces mesures devraient être définies:
SSLCertificateFile
SSLCertificateKeyFile
SSLCertificateChainFile
SSLCACertificateFile
Redémarrer httpd à l'aide de
sudo service httpd restart
et assurez-vous que httpd commencé:L'arrêt de httpd: [ OK ]
Démarrer httpd: [ OK ]
Copie
my-private-root-ca.cert
pour votre projet android actifs dossierCréer votre confiance manager:
SSLContext SSLContext;
CertificateFactory cf = CertificateFactory.getInstance("X. 509");
InputStream caInput = contexte.getAssets().open("mon-privé-root-ca.cert.pem");
Certificat d'autorité de certification;
try {
ca = cf.generateCertificate(caInput);
} finally {
caInput.close();
}
Et établissez la connexion à l'aide de HttpsURLConnection:
HttpsURLConnection connexion = (HttpsURLConnection) url.openConnection();
connexion.setSSLSocketFactory(SSLContext.getSocketFactory());
C'est ça, essayez de votre connexion https.
OriginalL'auteur MikeL
Il suffit d'utiliser cette méthode comme votre HTTPClient:
OriginalL'auteur SerCna