我们使用wso2 esb(版本4.0.3)来公开我们的Web服务。我们的web服务使用wso2中的管理控制台添加为代理服务。我们只想通过https公开/使用我们的web服务。生成存根后,我们完成了以下操作
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;
}});
但这可能会产生安全问题。请建议我们如何解决此问题。
答案 0 :(得分:2)
当主机名与证书的CN不匹配时,此错误会上升。我可以为您提供两种解决方案。