2011-06-21 2 views
0

Je suis en train de télécharger une page simple à partir d'une page sécurisée par SSL. J'utilise HtmlUnit pour cette tâche (qui entoure HttpClient).HttpClient + SSL de Glassfish

La page Web que j'essaye de télécharger a un certificat approprié signé par le certificat de Verisign et de Verisign est présent dans le dossier cacerts (il était là en premier lieu mais j'ai même réimporté la chaîne entière de certiciate là).

Mon application s'exécute parfaitement en tant qu'application autonome utilisant la même machine virtuelle Java utilisée par Glassfish. Toutefois, si je le déployer à glassfish Je reçois une exception problème de certificat classique:

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) 

Je l'ai déjà essayé de désactiver le gestionnaire de sécurité dans GlassFish et cela n'a pas aidé.

Quelle peut être la cause de ce comportement étrange?

Merci d'avance.

Répondre

0

S'il s'agit d'un code de test ou temporaire et que vous ne souhaitez pas valider le certificat, essayez accepting all certs and host names. En utilisant cette classe SSLUtilities:

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

Vous pouvez importer la chaîne de certificats dans un truststore et définissez les arguments VM suivants:

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

ou remplacer le truststore lors de l'exécution comme:

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

Conserver en gardant à l'esprit que les deux options remplaceront le fichier de clés de confiance JVM par défaut. Ainsi, si vous accédez à différents sites avec des certificats différents, vous pouvez les importer tous dans un fichier de clés certifiées.

Questions connexes