gpt4 book ai didi

Apache HTTP 客户端 javax.net.ssl.SSLPeerUnverifiedException : peer not authenticated

转载 作者:行者123 更新时间:2023-11-28 21:55:31 26 4
gpt4 key购买 nike

我们正在使用 tomcat 和 jersey 开发一个应用程序。
在此 Web 应用程序中,我们需要使用 valid 而不是过期的 certificate 连接到 https 网站。如果我通过我的 chrome 浏览器在本地连接到这个网站,一切正常!不幸的是,带有我们 webapp 的 tomcat 服务器抛出异常。我们正在使用 Apache HttpClient (4.0) 连接到 https 站点:

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

如有任何帮助,我将不胜感激!提前致谢!

最佳答案

好的,我搞定了!尽管 thawte 是一个众所周知的 CA,但它似乎 Java SSL 确实存在一些问题。通过 openssl 下载 ssl 证书后:

echo |\
openssl s_client -connect ${REMHOST}:${REMPORT} 2>&1 |\
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

并将其保存到 pem 文件中,我手动导入到 java keystore 中:

keytool -import -alias myAlias -file theCert.pem -keystore lib/security/cacerts

我不知道为什么 java ssl 无法正确验证 thawte 证书。

列出 keystore 向我展示了标准 keystore 中有 7 个 thawte 可信证书,但奇怪的是直到我手动导入 pem 文件它才起作用

关于Apache HTTP 客户端 javax.net.ssl.SSLPeerUnverifiedException : peer not authenticated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15837015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com