Использование HttpClient для POST для формирования, но получение SSLPeerUnverifiedException, но браузер работает отлично - PullRequest
3 голосов
/ 29 мая 2011

Используя HttpClient 4.1.0, мы пытаемся подключиться к удаленному серверу, который обычно подключается к форме.Кстати, это будет для производственного использования, но я бы не назвал конфиденциальную информацию, которую мы отправляем.Я не уверен, будут ли они настаивать на подключении https в любом случае.

Когда мы пытаемся вызвать httpClient.execute (httpPost), он выдает SSLPeerUnverifiedException

Мы создаем DefaultHttpClient, используяThreadSafeClientConnManager и проверили, что реестр https связан с SSLSocketFactory.

Мы подключаемся к URL-адресу следующим образом: https://some.thingchangedtoprotectthem.com/servlet/servlet.Something

Почему браузер работает как чудо, ноиспользование процесса на стороне сервера взрывается с этим исключением?Это потому, что браузер поставляется с сертификатами Verisign, а HttpClient - нет?

System.out and Stack trace below:
    schemeSocketFactory = org.apache.http.conn.ssl.SSLSocketFactory
    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:562)
          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)

Ответы [ 2 ]

2 голосов
/ 29 мая 2011

Да, действительно.Вам следует взглянуть на это сообщение в блоге , где автор описывает, как загрузить и установить сертификат в вашем хранилище ключей.Он написан как статья для разработчиков Android, но наиболее определенно относится к вашему случаю.

В худшем случае, этот вопрос расскажет вам, как доверять всем сертификатам, хотя это не очень хорошая идея.;)

1 голос
/ 29 мая 2011

«Это потому, что браузер поставляется с сертификатами verisign, а HttpClient нет?»

Почти наверняка.

См. это сообщение , чтобы узнать, как его исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...