【问题标题】:SSLHandshake Exception while using jdk 1.6使用 jdk 1.6 时出现 SSLHandshake 异常
【发布时间】:2015-04-18 02:01:18
【问题描述】:

我正在尝试使用 HTTPClient / URLConnection 连接到 REST Web 服务。它是一个简单的代码,在 jdk 1.7 中运行良好,但在使用 jdk1.6 时会引发 SSLHandshake 异常

    IO Exception:  javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative DNS name matching your.domain.name.com found.
...

    Caused by: java.security.cert.CertificateException: No subject alternative DNS name matching your.domain.name.com found.

另外,代码很基础

URL url = new URL("https://your.domain.name.com/services/");
HttpsURLConnection   urlConnection = (HttpsURLConnection) url.openConnection();
urlConnection.setRequestProperty("Authorization", "Basic " + encodedCredenials);
urlConnection.setRequestProperty("Content-Type", "application/vnd.mtdomain.gold+json");
InputStream is = urlConnection.getInputStream();

这是 jdk 1.6 和 1.7 之间的已知问题吗? 我们怎样才能解决这个问题?我不太熟悉 SSL 相关问题。

【问题讨论】:

  • 您调用的 URL 是什么,提供的证书是什么?主机名验证似乎失败了。
  • 我猜这与JDK1.6中缺少对SNI的支持有关。您可能得到了错误的证书。
  • @DeepakBala 连接到此服务时没有完成与证书相关的代码。我已经用我的代码更新了问题
  • @RijuMahna:您正在尝试连接到 HTTPS 地址。所以 JDK 在内部为你处理 SSL 握手。
  • 我们仍然需要查看您尝试联系的证书和域名。 Steffen 谈论的是在 JDK7 中修复的 bug。我不确定如果没有客户端在其hello 中提供 server_name 以及 Java 如何处理此问题,SNI 将如何工作。如果您提供涉及的域名和证书链,则可以缩小问题范围。

标签: java ssl java-7 sslhandshakeexception jdk6


【解决方案1】:

这个问题可能是由于以下原因(错误的网址、损坏的证书或无效的证书)。

要安装证书,请使用以下语法。

默认密钥库 将证书安装到默认密钥库 (JDK cacerts) 1.从服务器导出证书(.cer) 2. 打开命令提示符并转到 JAVA_HOME/jre/lib/security 3.执行以下命令

Windows

keytool -import -v -alias -keystore cacerts -file \.cer

密码:修改

Unix

/bin/keytool -import -v -alias -keystore cacerts -文件 \.cer

密码:修改

  1. 选择“是”选项并按 Enter 键

自定义密钥库 将证书安装到自定义密钥库 1.从服务器导出证书(.cer) 2. 打开命令提示符并转到您要创建自定义密钥库的位置 3.执行以下命令 Windows keytool -import -v -trustcacerts -alias -file \.cer -keystore .jks -keypass changeit 密码:更改它

Unix /bin/ keytool -import -v -trustcacerts -alias -file \.cer -keystore .jks -keypass changeit 密码:更改它

  1. 选择“是”选项并按 Enter 键

在调用自定义密钥库时添加以下系统变量

-Dweblogic.security.SSL.ignoreHostnameVerification=true -Dweblogic.security.TrustKeyStore=CustomTrust -
Dweblogic.security.CustomTrustKeyStoreFileName=<location>/<keystore-name>.jks -Djavax.net.ssl.trustStore=<location>/<keystore-name>.jks -Djavax.net.ssl.trustStorePassword=changeit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 2011-01-26
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多