在默认 WSo2 证书中用作通用名称的“Localhost”创建“未找到主题备用名称”

2024-05-04

我们使用 wso2 esb(版本 4.0.3)来公开我们的 Web 服务。我们的 Web 服务是使用 wso2 中的管理控制台添加为代理服务的。我们只想通过 https 公开/使用我们的 Web 服务。生成存根后,我们完成了以下操作

  1. 使用 java keytool 创建 jks 文件。
  2. 导出 wso2 证书并导入到 jks 文件中。
  3. 在调用Web服务时在代码中添加以下内容。

System.setProperty("javax.net.ssl.trustStore", "文件名"); System.setProperty("javax.net.ssl.trustStorePassword", "密码");

完成所有这些之后,当我们尝试从 java 代码调用 Web 服务时,它仅在使用 localhost 给出 url 时才有效。即使我们在主机文件中具有正确的映射,它也不适用于 127.0.0.1 或计算机 IP 地址。在使用 IP 地址时,我们收到错误如下javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present。 出现此错误是因为 wso2 提供的默认证书将“localhost”作为通用名称。我们可以通过添加以下代码来解决这个问题

 HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
          public boolean verify(String string, SSLSession ssls) {
                          return true;
          }});

但这可能会产生安全问题。请建议我们如何解决这个问题。


当主机名与证书的 CN 不匹配时,会出现此错误。我可以为您提供两种解决方案。

  • 如果您只需要使用 IP 地址访问服务,则只需生成一个证书,将正确的 IP 地址作为服务器证书的 CN 值。可以使用Java Keytool。
  • 如果要使用 IP 地址和主机名来寻址服务,请生成包含主题备用名称 (SAN) 的证书。 Java 7 附带的 Java Keytool 能够使用 SAN 生成证书。否则,请使用任何其他工具(例如 OpenSSL)或使用由 CA 与 SAN 颁发的证书。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在默认 WSo2 证书中用作通用名称的“Localhost”创建“未找到主题备用名称” 的相关文章

随机推荐