我正在尝试使用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相关问题不太熟悉。
答案 0 :(得分:0)
由于以下原因(错误的网址,正式证书或无效的证书),可能会发生此问题。
要安装证书,请使用以下语法。
默认密钥库 将证书安装到默认密钥库(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.从服务器(.cer)导出证书 2.打开命令提示符,然后转到要创建自定义密钥库的位置 3.执行以下命令 的视窗强> 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
调用自定义密钥库
时添加以下系统变量-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