我们在Jboss SOA 5.3.1中部署了一个应用程序。在服务器和客户端都创建了自签名证书,它是1路ssl。但是,使用主机名和端点创建的服务器和客户端证书都使用IP地址注册。我们正在使用
protocol-socket-factory=org.apache.commons.httpclient.contrib.ssl.StrictSSLProtocolSocketFactory
在httpClient.properties中配置。但是当达到终点时,会抛出异常说
org.jboss.soa.esb.actions.ActionProcessingException:处理HTTP I / O的问题:证书中的主机名不匹配:< 15.191.34.56> !=主机名。
请告诉我如何禁用严格SSL的主机名验证?
答案 0 :(得分:1)
关闭主机名验证会使您的连接容易受到MITM攻击。这不是解决此问题的正确方法。
您遇到的问题来自于您使用的是IP地址,而不是主机名。 Java严格遵循RFC 2818(与某些浏览器不同):
在某些情况下,URI被指定为IP地址而不是主机名。在这种情况下,iPAddress subjectAltName必须存在于证书中,并且必须与URI中的IP完全匹配。
生成证书时,请确保将IP地址放在主题备用名称(IP地址类型)中,如here所述。 或者,使用主机名(尽管仍然建议将名称放在SAN中)。
答案 1 :(得分:0)
Web的整个SSL认证基于主机名。您不能简单地关闭"主机名验证"因为它是标准的一部分。
要克服此问题,您需要按颁发的证书中指定的名称调用主机。如果您有中央DNS服务器,最好在那里配置主机名。如果没有,您可以在需要通信的盒子上使用主机文件。
添加以下行:
15.191.34.56 hostName.with.cert.issued
在您的代码调用服务器名称中,您还需要确保JBoss正在侦听此名称。