Waarom kry ek 'n uitsondering javax.net.ssl.SSLPeerUnverifiedException: eweknie nie geverifieer nie?

I ' m gebruik Apache HttpComponents HttpClient (4.0.1) om 'n HTTPS-oproep te maak, maar ek is hierdie uitsondering as die antwoord:

 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)

Ek het al die nodige parameters verskaf. Die bestemmingstelsel benodig geen gebruikersnaam / wagwoord of volmag nie, maar dit bevat JKS-artikels wat op die bediener geïnstalleer is. Die gebruikersnaam en wagwoorde is leë waardes.

Dit werk met org.apache.commons.httpclient.methods.PostMethod - Weergawe 3.0 - commons-httpclient-3.0.jar Nou is ons geïmplementeer met org.apache.http.client.methods.HttpPost - Weergawe 4.0.1 - commons-httpclient.jar

Dit is die voorbeeldkodestukkie wat nie werk nie:

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();
}
26
задан skaffman 18 May 2012 в 18:47
поделиться

2 ответа

как уже упоминалось выше, либо вы импортируете сертификат

  1. Запустите командную строку в каталоге, в который вы поместили сертификат (например, XYZ.cer)
  2. Выполните следующую команду, просто измените активный JRE путь (и обратите внимание на символ ~)
  3. keytool -import -alias XYZ -file XYZ.cer -keystore C: /Program~1/Java/jdk1.6.0_23/jre/lib/security/ cacerts -storepass changeit

                               OR
    

используйте свой собственный менеджер доверия http://tech.chitgoks.com/2011/04/24/how-to-avoid-javax -сетью-SSL-sslpeerunverifiedexception-одноранговой не прошедших проверку подлинности-проблем с помощью-апаша-HttpClient /

5
ответ дан 28 November 2019 в 07:49
поделиться

Убедитесь, что URL-адрес сервера должен использовать https вместо http. Вы можете получить эту ошибку, пытаясь установить безопасное соединение с http URL.

0
ответ дан 28 November 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: