JVM忽略证书名称不匹配

时间:2010-04-20 20:42:53

标签: java ssl certificate truststore

我知道有很多关于如何忽略代码中的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

1 个答案:

答案 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的最佳实践。最好的解决方案是使用与主机名匹配的证书。