J'ai testé un système qui accède à un groupe de serveurs https avec des clés différentes, dont certaines sont invalides et toutes ne sont pas le magasin de clés local pour ma machine virtuelle Java. Je ne fais que tester les choses, donc je ne me soucie pas de la sécurité à ce stade. Y at-il un bon moyen de faire des appels POST au serveur et dire à Java de ne pas s'inquiéter des certificats de sécurité? Mes recherches google à ce sujet ont soulevé quelques exemples de code qui font une classe pour faire la validation, cela fonctionne toujours, mais je ne peux pas l'obtenir pour se connecter à l'un des serveurs.Établir une connexion à un serveur HTTPS à partir de Java et ignorer la validité du certificat de sécurité
Répondre
Selon les commentaires:
Avec des exemples Googled, vous voulez dire entre autres this one?
Mise à jour: le lien cassé, voici donc un extrait de pertinence que je sauvé de the internet archive:
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
}
// Now you can access an https URL without having the certificate in the truststore
try {
URL url = new URL("https://hostname/index.html");
} catch (MalformedURLException e) {
}
Vous devez créer un X509TrustManager qui contourne tout le contrôle de sécurité. Vous pouvez trouver un exemple dans ma réponse à cette question,
How to ignore SSL certificate errors in Apache HttpClient 4.0
Et vous avez ensuite besoin de le jeter. Il ne sert à rien d'écrire du code de sécurité et de le tester de manière non sécurisée. Résoudre le problème*. Si vous ne voulez pas de sécurité, n'utilisez pas SSL. Je tremble de penser combien de fois cette chose est entrée dans la production. – EJP
Nous le faisons de cette façon !!! :) En production !! – Daniel
@Daniel alors votre système de production n'est pas sécurisé. Vous devez lire les remarques à ce sujet dans RFC2246. C'est une question très sérieuse. – EJP
Avec des exemples Googled, vous voulez dire sous chaque [celui-ci] (http: //www.exampledepot.com/egs/javax.net.ssl/trustall.html)? – BalusC
Merci BalusC qui fonctionne parfaitement. J'ai essayé 3 ou 4 qui a compilé et a bien fonctionné mais n'a pas fonctionné. Pourriez-vous faire une réponse? – justinhj
Terminé. Mais à l'avenir, s'il vous plaît mentionner dans la question quels exemples exactement vous avez essayé avec des liens :) – BalusC