1

我正在尝试使用 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 相关问题。

4

1 回答 1

0

由于以下原因(错误的 url、损坏的证书或无效的证书),可能会发生此问题。

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

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

视窗

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

密码:changeit

Unix

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

密码:changeit

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

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

Unix /bin/ keytool -import -v -trustcacerts -alias -file \.cer -keystore .jks -keypass changeit 密码: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
于 2015-09-08T04:55:49.787 回答