我知道有很多关于如何忽略代码中的SSL错误的问题/答案。
在我们的开发区dev.domain.tld
,我们已经通过SSL配置了应用服务器。
显示的证书适用于somedev.domain.tld
。
无法更改证书,它始终是域不匹配。
因此,当我将网络服务部署到https://dev.domain.tld
并尝试连接/调用我的网络服务时,我得到一个例外:
引起: java.security.cert.CertificateException: 找不到匹配dev.domain.tld的名称
我的信托商店里有somedev.domain.tld
CERT。
现在,我看到了很多样本如何更改代码(使用信托经理接受所有域),但我怎么指定到JVM忽略域匹配连接到服务器时?是否有-Djavax.net.ssl
个参数?
谢谢!
更新
或者,因为我使用的是Spring-WS,有没有办法在Spring中为它设置一些属性? (WebServiceTemplate)
更新
我想我必须使用Spring Security中的一些东西:http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html
答案 0 :(得分:2)
这适用于我的客户端应用程序,如果您(或Spring在内部)在任何地方使用HttpsURLConnection,这对您也有用。
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
log.warning(String.format("Warning: URL Host: '%s' does not equal '%s'", urlHostName, session.getPeerHost()));
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
虽然它几乎不是SSL的最佳实践。最好的解决方案是使用与主机名匹配的证书。