Java 如何在jboss中禁用主机名验证

Java 如何在jboss中禁用主机名验证,java,ssl,jboss,Java,Ssl,Jboss,我们在JBossSOA5.3.1中部署了一个应用程序。在服务器和客户端中创建了自签名证书,它是单向ssl。但使用主机名和端点创建的服务器和客户端证书都使用IP地址注册。我们正在使用 protocol-socket-factory=org.apache.commons.httpclient.contrib.ssl.StrictSSLProtocolSocketFactory 在httpClient.properties中配置。但当到达终点时,抛出异常,表示 org.jboss.soa.esb.a

我们在JBossSOA5.3.1中部署了一个应用程序。在服务器和客户端中创建了自签名证书,它是单向ssl。但使用主机名和端点创建的服务器和客户端证书都使用IP地址注册。我们正在使用

protocol-socket-factory=org.apache.commons.httpclient.contrib.ssl.StrictSSLProtocolSocketFactory
在httpClient.properties中配置。但当到达终点时,抛出异常,表示

org.jboss.soa.esb.actions.ActionProcessingException:处理HTTP I/O时出现问题:证书中的主机名不匹配:!=主机名


请告诉我如何禁用严格SSL的主机名验证?

整个Web SSL认证都基于主机名。您不能简单地关闭“主机名验证”,因为它是标准的一部分

要解决这个问题,您需要根据颁发的证书中指定的主机名调用主机。如果您有中央DNS服务器,最好在那里配置主机名。如果没有,您可以在需要通信的盒子上使用主机文件

  • 在Windows上,它将位于:驱动器:\Windows\System32\drivers\etc\hosts
  • 在Linux上,它位于/etc/hosts中
添加以下行:
15.191.34.56主机名。已颁发.cert.


在您的代码中,通过名称调用服务器,您还需要确保JBoss正在侦听这个名称

关闭主机名验证会使您的连接容易受到MITM攻击。这不是解决问题的正确方法

您遇到的问题来自于您使用的是IP地址,而不是主机名。Java在这一点上严格遵循RFC2818(与某些浏览器不同):

在某些情况下,URI被指定为IP地址而不是主机名。在这种情况下,iPAddress subjectAltName必须存在于证书中,并且必须与URI中的IP完全匹配

生成证书时,请确保将IP地址放在使用者备选名称(IP地址类型)中,如下所述。
或者,改用主机名(尽管仍然建议将该名称放在SAN中)。

在/etc/hosts中完成IP地址和主机名客户端的配置,该客户端几乎没有使用IP地址注册端点的服务,因此无法将其更改为主机名。我也尝试过AUTHSSL和EasySSL。我读到了StrictSSL有一种方法可以禁用主机名验证,我尽可能地禁用主机名。在httpClient.properties中,我添加了以下conf STRICTSSL=false StrictSSLProtocolSocketFactory.setHostnameVerification=false以上值不正确,我看到了,那么是否可以为套接字工厂添加包装器?在默认构造函数中,使用false参数调用基类的构造函数。我已经创建了一个自定义类,扩展了apache提供的StrictSSL,并在默认构造函数中设置了false,该构造函数可以正常工作,但会破坏其安全性。由您决定,但它是否真的比使用正确的SAN生成新证书要少(还考虑到您可能必须在以后的应用程序部署中修复该代码,以便删除此潜在漏洞)?