2

我知道有很多关于如何忽略代码中的 SSL 错误的问题/答案。

在我们的开发区dev.domain.tld,我们已经通过 SSL 配置了一个应用服务器。

显示的证书适用于somedev.domain.tld

没有办法更改证书,它将始终是域不匹配。

因此,当我将 Web 服务部署到https://dev.domain.tld并尝试连接/调用我的 Web 服务时,会出现异常:

原因:java.security.cert.CertificateException:找不到与 dev.domain.tld 匹配的名称

我的信任库中有somedev.domain.tldCERT。

现在,我看到很多示例如何在代码中更改它(使用接受所有域的信任管理器),但是如何指定 JVM 在连接到服务器时忽略域不匹配?有-Djavax.net.ssl争论还是什么?

谢谢!

更新:

或者,由于我使用的是 Spring-WS,有没有办法在 Spring 中为此设置一些属性?(网络服务模板)

更新

我想我必须使用 Spring Security 中的一些东西:http: //static.springsource.org/spring-ws/sites/1.5/reference/html/security.html

4

1 回答 1

3

这在我的客户端应用程序中对我有用,如果您(或 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 最佳实践。最好的解决方案是使用与主机名匹配的证书。

于 2010-04-20T21:09:59.857 回答