我們正在開發一個使用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