Ignorer Certificat SSL Erreurs avec Java
Client Http Apache. Vous pouvez voir le code ici:
String url = "https://path/to/url/service";
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(url);
//Test whether to ignore cert errors
if (ignoreCertErrors){
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager(){
public X509Certificate[] getAcceptedIssuers(){ return null; }
public void checkClientTrusted(X509Certificate[] certs, String authType) {}
public void checkServerTrusted(X509Certificate[] certs, String authType) {}
}
};
try {
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
} catch (Exception e){
e.printStackTrace();
}
}
try {
//Execute the method (Post) and set the results to the responseBodyAsString()
int statusCode = client.executeMethod(method);
resultsBody = method.getResponseBodyAsString();
} catch (HttpException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
} finally {
method.releaseConnection();
}
C'est la méthode que tout le monde dit d'utiliser de l'ignorer Certificat SSL Erreurs (seulement cette mise en place pour la mise en scène, il ne sera pas utilisé dans la production). Cependant, je suis encore en train de l'exception suivante/stacktrace:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building unable to find valid certification path to requested target
Des conseils serait génial. Si je fais le TrustManager mal, ou si je devrais être en cours d'exécution de la méthode HTTP Post différemment, de toute façon.
Merci!
Merci de lire la réponse à la question que vous avez posté (comme je l'ai fait à de nombreuses reprises). Je suis en train de faire ce qu'il dit, mais je suis encore à l'origine du problème. Merci.
Veuillez coller votre code dans le cadre de votre question, de sorte qu'il est autonome. Pas besoin d'utiliser Gist/Github pour de petites choses comme cela.
'Tout le monde' est faux à ce sujet. En ignorant les problèmes de certificat SSL rend radicalement d'insécurité, particulièrement vulnérables aux man-in-the-middle attaques. Voir la discussion dans RFC 2246. Il convient également de noter que la mise en œuvre de
L'affiche n'a pas été de poser pour une conférence sur la sécurité. Il voulait savoir comment faire quelque chose.
Veuillez coller votre code dans le cadre de votre question, de sorte qu'il est autonome. Pas besoin d'utiliser Gist/Github pour de petites choses comme cela.
'Tout le monde' est faux à ce sujet. En ignorant les problèmes de certificat SSL rend radicalement d'insécurité, particulièrement vulnérables aux man-in-the-middle attaques. Voir la discussion dans RFC 2246. Il convient également de noter que la mise en œuvre de
X509TrustManager
dans votre lien, avec la plupart des autres que j'ai vu, n'est pas conforme à la spécification.L'affiche n'a pas été de poser pour une conférence sur la sécurité. Il voulait savoir comment faire quelque chose.
OriginalL'auteur andrewpthorp | 2012-08-21
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, ne pas ignorer les erreurs de certificat. Traiter avec eux à la place. En ignorant les erreurs de certificat ouvre la connexion à de potentielles attaques MITM. C'est comme éteindre la sonnerie de votre avertisseur de fumée parce que parfois ça fait du bruit...
Sûr, il est tentant de dire que c'est uniquement pour tester le code, il ne finira pas dans le processus de production, mais nous savons tous ce qui arrive lorsque l'approche de la date limite: le code ne présente pas d'erreur lorsqu'il est testé -> nous pouvons l'expédier comme il est. Vous devez mettre en place un test de CA au lieu de cela, si vous en avez besoin. Ce n'est pas très dur à faire, et l'ensemble du processus est certainement pas plus difficile que l'introduction d'un code personnalisé pour le développement et la retirer de la production.
Vous êtes visiblement à l'aide d'Apache Http Client:
Encore, vous êtes à l'initialisation de la
javax.net.ssl.HttpsURLConnection
avec leSSLContext
vous avez créé:C'est complètement indépendant de l'Apache Http paramètres du Client.
Au lieu de cela, vous devez configurer le
SSLContext
pour le Client Http Apache bibliothèque, comme décrit dans cette réponse. Si vous utilisez Apache Http Client 3.x, vous devez configurer votre propreSecureProtocolSocketFactory
à utiliser queSSLContext
(voir les exemples ici). Il vaut la peine de la mise à niveau du Client Http Apache 4.x si, qui a le soutien direct deSSLContext
.Vous pouvez également utiliser La réponse de Pascal pour importer le certificat correctement. Encore une fois, si vous suivez les accepté de répondre (par Kevin) à cette question, vous aurez en effet ignorer l'erreur, mais cela permettra de faire le lien vulnérables aux attaques de type MITM.
Bingo, merci! C'est ce que je cherchais.
Chargement des environnements différents par l'intermédiaire d'un fichier de propriétés peut fonctionner, mais vous aurez encore une certaine insécurité code dans votre base de code (qui quelqu'un d'autre peut en fin de copie/paster). Dans l'ensemble, ayant un test en interne CA fait beaucoup plus réaliste des tests qui ne nécessitent pas de changement de code (uniquement de la configuration).
Je ne suis pas 100% sûr de ce qu'un test CA y est, pourriez-vous nous éclairer?
Eh bien, il suffit de créer votre propre autorité de certification et d'émettre des certificats. Dans votre environnement de dev, mettre en place des services pour l'utilisation de ces certificats et importer le CA cert lui-même dans le truststore des clients. Ce n'est viable que dans un test/environnement de dev, et il existe des outils pour vous aider avec ceci (par exemple, l'installation de OpenSSL
CA.pl
ou TinyCA).OriginalL'auteur Bruno
HttpClient 4.3, c'est facile,
qui devrait corriger ur problème
OriginalL'auteur eddy_sby2000
En ignorant les certificats dispose de son propre dommage, parce que le même code peut se déplacer dans la production de l'environnement, et peut causer des ravages.
Exemple ci-dessous est avec Maillot de Repos Client
Et en ignorant les certificats peuvent être comme ci-dessous:
OriginalL'auteur Amit Kaneria
Si vous voulez vraiment ignorer tout cela a fonctionné pour moi:
OriginalL'auteur Kyle