【发布时间】:2017-08-02 17:33:54
【问题描述】:
我正在尝试向我们的一个服务器 url 发送请求,但是每当我尝试连接时,我都会得到这个期望
java.net.ConnectException: Received fatal alert: handshake_failure
这是我访问网站时从浏览器获得的证书详细信息。
Common Name (CN) Go Daddy Secure Certificate Authority - G2
Organisation (O) GoDaddy.com, Inc.
Organisational Unit (OU) http://certs.godaddy.com/repository/
我在我的 java 目录中的 cacerts 中检查了相同的详细信息
keytool -list -keystore /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.101-3.b13.24.amzn1.x86_64/jre/lib/security/cacerts | grep godaddy
godaddyclass2ca, 23 Sep, 2016, trustedCertEntry,
godaddyrootcertificateauthority-g2, 23 Sep, 2016, trustedCertEntry,
这是安装的java版本:
openjdk version "1.8.0_101"
OpenJDK Runtime Environment (build 1.8.0_101-b13)
OpenJDK 64-Bit Server VM (build 25.101-b13, mixed mode)
我什至从浏览器下载了证书并将其导入cacerts
keytool -import -keystore cacerts -file test.cer
请帮我调试一下。
【问题讨论】:
-
根据您的例外情况,这看起来不像
SSL exception,这意味着您的证书信任路径可能会得到正确验证。但是由于协议不匹配或您的主机名与证书不匹配等其他原因,连接可能会失败。您可以检查服务器支持的协议吗? Tou 正在使用 java 8 ,因此您的客户端应该使用tlsv2。 -
您应该使用 -Djavax.net.debug=all 运行并查看失败的协议步骤
-
我刚刚找到另一个thread,这可能对你有帮助。
标签: java ssl ssl-certificate