Pourquoi suis-je une exception javax.net.le protocole ssl.SSLPeerUnverifiedException: peer pas authentifié?
Je suis en utilisant Apache HttpComponents HttpClient(4.0.1) pour faire un HTTPS appel, mais je suis de cette exception, car la réponse:
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:345)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:390)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:561)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
J'ai fourni tous les paramètres. Le système de destination ne nécessite pas de nom d'utilisateur/mot de passe ou un proxy, mais il contient JKS csrtificates qui sont installés dans le serveur. Le nom d'utilisateur et mot de passe sont vides valeurs.
C'est de travailler avec org.apache.commons.httpclient.methods.PostMethod
- Version 3.0 - commons-httpclient-3.0.jar
Maintenant, nous avons mis en place avec org.apache.http.client.methods.HttpPost
- Version 4.0.1 - commons-httpclient.jar
C'est l'exemple de fragment de code qui ne fonctionne pas:
HttpParams param = new BasicHttpParams();
HttpProtocolParams.setVersion(param, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(param, "UTF-8");
HttpProtocolParams.setUseExpectContinue(param, true);
DefaultHttpClient httpClient = new DefaultHttpClient(param);
httpClient.getParams().setParameter(HttpConnectionParams.CONNECTION_TIMEOUT,10000)));
httpClient.getParams().setParameter(HttpConnectionParams.SO_TIMEOUT,10000)));
httpClient.getCredentialsProvider().setCredentials(new AuthScope(<HOST IP,PORT)),
AuthScope.ANY_REALM),
new UsernamePasswordCredentials("", ""));
try {
HttpPost httpPost = new HttpPost(END POINT URL);
StringEntity requestEntity = new StringEntity(inputString, "text/xml", "UTF-8");
httpPost.setEntity(requestEntity);
response = httpClient.execute(httpPost);
HttpEntity responseEntity = response.getEntity();
if (null != responseEntity)
{
responseBody = EntityUtils.toString(responseEntity);
}
if (null != httpPost.getURI()) {
url = httpPost.getURI().toString();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
httpClient.getConnectionManager().shutdown();
}
Vous devez vous connecter pour publier un commentaire.
Le message de l'exception
n'indique pas toujours la cause racine du problème.
Vous devrez peut-être activer le SSL handshake debug par l'ajout de theJava VM paramètre
-Djavax.net.debug=ssl:handshake
.Une fois que vous avez ajouté que vous recevrez plus de messages d'erreur utiles.
Si le serveur distant utilise un certificat qui n'est pas digne de confiance, vous verrez le message d'erreur suivant:
Si c'est le cas, alors la réponse par @Abhishek permettra de résoudre le problème.
comme mentionné ci-dessus, soit vous importez le certificat
keytool -import-alias XYZ -fichier XYZ.cer -keystore C:/Program~1/Java/jdk1.6.0_23/jre/lib/security/cacerts -storepass changeit
utiliser votre propre gestionnaire de confiance
http://tech.chitgoks.com/2011/04/24/how-to-avoid-javax-net-ssl-sslpeerunverifiedexception-peer-not-authenticated-problem-using-apache-httpclient/
Toute connexion SSL problème peut provoquer cette erreur.
Un de mes est la solution de mise à niveau java à partir de 6 à 8.
Notre problème est que le serveur nous avions l'intention de communiquer, c'est arrêter le support de TLS 1.0. Et la version 6 de java ne supporte pas la version supérieure de TLS 1.0. Après la mise à jour de Java (même sans la mise à niveau dropwizard), il fonctionne.
Assurez-vous que l'URL du serveur est censé utiliser https au lieu de http. Vous pouvez obtenir cette erreur en essayant de mettre en place une connexion sécurisée à une URL http.