在默认WSo2证书中用作公用名的“Localhost”创建了无主题备用名称

时间:2012-05-31 13:31:35

标签: wso2 wso2esb

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

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

    System.setProperty(“javax.net.ssl.trustStore”,“filename”);       System.setProperty(“javax.net.ssl.trustStorePassword”,“password”);

    在我们尝试从java代码调用webservice之后执行所有这些操作之后,只有在使用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;
              }});
    

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

1 个答案:

答案 0 :(得分:2)

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

  • 如果您只需要使用IP地址访问服务,则只需生成具有正确IP地址的证书作为服务器证书的CN值的值。可以使用Java Keytool。
  • 如果要同时使用IP地址和主机名来寻址服务,请生成包含主题备用名称(SAN)的证书。带有Java 7的Java Keytool能够使用SAN生成证书。否则,请使用任何其他工具(如OpenSSL)或使用CA颁发的SAN证书。