我们正在开发一个使用tomcat和jersey的应用程序。
在这个web应用程序中,我们需要连接到一个https Website
与valid
,未过期certificate
。 如果我通过我的浏览器在本地连接到本网站,一切正常! 不幸的是,我们的webapp的tomcat服务器抛出一个异常。我们使用Apache HttpClient (4.0)
连接到HTTPS站点:Apache HTTP客户端javax.net.ssl.SSLPeerUnverifiedException:未通过身份验证的对象
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:371)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:126)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:645)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:480)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
服务器证书是绝对有效的,从thawte
。 三种不同的在线工具可成功验证证书。
Openssl
有一些问题,也和我展示三个证,但抛出一个简单的错误:
Verify return code: 20 (unable to get local issuer certificate)
问题与OpenSSL的似乎是,它使用了错误的道路,而不是/usr/lib/ssl
的/etc/ssl/certs
。如果我使用指向正确路径的CApath参数,openssl可以正常工作,所以这可能是httpClient的问题吗?
因此,我们默认客户端代码非常简单:
client = new DefaultHttpClient();
response = client.execute(url); //this throws the exception
EntityUtils.consume(response.getEntity());
这不是一个选项,通过实现自定义TrustedManager允许任何证书! 我还读过,有些CA不是JDK/JRE的一部分,所以它的证书应该手动导入keystore
或使用自定义的证书,但是thawte是一个众所周知的CA,它不应该在默认情况下工作?
编辑
我没有设置在catalina.sh的javax.debug属性,使我对这个问题的详细信息:
http-bio-8080-exec-1, handling exception: javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: PKIX path validation failed:
java.security.cert.CertPathValidatorException: basic constraints check failed:
pathLenConstraint violated - this cert must be the last cert in the certification path
我希望得到任何帮助! 在此先感谢!
? – beny23 2013-04-05 22:13:30
@ beny23像我说的我正在使用4.x – Alexander 2013-04-06 07:46:40
哪个版本的java? – beny23 2013-04-06 11:28:41