【发布时间】: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