HttpClient + SSL от Glassfish - PullRequest
       14

HttpClient + SSL от Glassfish

0 голосов
/ 21 июня 2011

Я пытаюсь загрузить простую страницу с защищенной SSL-страницы.Я использую HtmlUnit для этой задачи (которая оборачивается вокруг HttpClient).

У веб-страницы, которую я пытаюсь загрузить, имеется соответствующий сертификат, подписанный Verisign, и сертификат Verisign присутствует в файле cacerts (он был там в первую очередь, но я даже импортировал туда всю цепочку сертификатов).

Мое приложение отлично работает как автономное приложение, использующее ту же JVM, что и Glassfish.Однако, если я разверну его на glassfish, я получу классическое исключение проблемы с сертификатом:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated,
com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352)
org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:339)
org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123)
org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147)
org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:597)
com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:133)
com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1405)
com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1324)
com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:303)
com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:385)

Я уже пытался отключить диспетчер безопасности в glassfish, но это не помогло.

Что можетбыть причиной этого странного поведения?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 21 июня 2011

Я думал, что GlassFish использует свой собственный магический склад ключей:

http://metro.java.net/guide/Configuring_Keystores_and_Truststores.html

Удачи!

0 голосов
/ 21 июня 2011

Вы можете импортировать цепочку сертификатов в хранилище доверенных сертификатов и установить следующие аргументы виртуальной машины:

-Djavax.net.ssl.trustStore="<path to truststore file>"
-Djavax.net.ssl.trustStorePassword="<passphrase for truststore>"

или переопределить хранилище доверенных сертификатов во время выполнения, например:

System.setproperty("javax.net.ssl.trustStore","<path to truststore file>")
System.setproperty("javax.net.ssl.trustStorePassword","<passphrase for truststore>")

Имейте в виду, что оба вариантапереопределит хранилище доверенных сертификатов JVM по умолчанию.Так что, если вы посещаете разные сайты с разными сертификатами, вы можете импортировать все из них в один склад доверенных сертификатов.

0 голосов
/ 21 июня 2011

Если это тестовый или временный код, и вы не хотите проверять сертификат, попробуйте принять все сертификаты и имена хостов . Используя этот класс SSLUtilities:

SSLUtilities.trustAllHostnames();
SSLUtilities.trustAllHttpsCertificates();
...