2011-06-21 23 views
0

SSLセキュアなWebページから簡単なページをダウンロードしようとしています。私はそのタスク(HttpClientをラップする)のためにHtmlUnitを使用しています。GlassfishのHttpClient + SSL

私がダウンロードしようとしているウェブページにはVerisignによって署名された適切な証明書があり、Verisign証明書はcacertsファイルにあります(最初はそこにありましたが、そこに証明書のチェーン全体が再インポートされました)。

私のアプリケーションは、Glassfishが使用するのと同じJVMを使用するスタンドアロンアプリケーションとして完全に動作します。しかし、私は、古典的な証明書の問題の例外を取得しています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の中でセキュリティマネージャを無効にすることを試みた、それは助けにはなりませんでした。

この奇妙な動作の原因は何ですか?

ありがとうございます。

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

幸運:

答えて

2

私はGlassFishのは、それ自身の魔法のキーストアを使用と思いました!

0

テストコードまたはテンポラリコードで、証明書の検証に気にしない場合は、accepting all certs and host namesを試してください。そのSSLUtilitiesクラスを使用:

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

あなたはトラストストアに証明書チェーンをインポートすると、次のVM引数を設定することができます。

-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トラストストアをオーバーライドすることに注意してください。したがって、異なる証明書を持つ異なるサイトにアクセスしている場合は、それらをすべて1つのトラストストアにインポートすることができます。