JBoss EAP 6.4开发环境禁用HTTPS主机名验证问题咨询
解决JBoss/WildFly环境下无需改代码绕过HTTPS主机名验证的问题
我明白你现在的困扰——已经导入了证书,设置了org.jboss.security.ignoreHttpsHost系统属性却还是遇到主机名不匹配的报错,而且不想动代码用CXF的disableCNCheck。其实那个系统属性是针对JBoss旧组件或EJB客户端的,对CXF客户端并不生效,给你几个不用改代码的可行方案:
方案1:在JBoss配置文件里全局配置CXF和Undertow
针对CXF客户端全局禁用CN检查
打开standalone.xml(集群环境用domain.xml),找到CXF子系统的配置节点(一般是<subsystem xmlns="urn:jboss:domain:cxf:XX.X">,XX.X是你的版本号),添加全局默认设置:
<subsystem xmlns="urn:jboss:domain:cxf:XX.X"> <default-settings> <tls-config disable-cn-check="true"/> </default-settings> </subsystem>
这个配置会让所有部署在JBoss上的CXF客户端自动跳过主机名验证,完全不用改应用代码。
针对Undertow服务器端的HTTPS监听
如果是你的JBoss自身作为HTTPS服务器被访问时出现的问题,找到Undertow子系统下的<https-listener>节点,添加verify-host="false":
<https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" verify-host="false"/>
方案2:用JVM启动参数全局跳过验证
直接在JBoss的启动脚本(比如standalone.sh或standalone.bat)里加JVM参数,覆盖默认的主机名验证器:
# Linux/Mac环境 JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.HostnameVerifier=org.jboss.security.ssl.AnyHostNameVerifier" # Windows环境 set "JAVA_OPTS=%JAVA_OPTS% -Djavax.net.ssl.HostnameVerifier=org.jboss.security.ssl.AnyHostNameVerifier"
这个参数会让JVM层面所有HTTPS连接都跳过主机名检查,开发环境用起来很方便,但注意别在生产环境用。
方案3:修改证书让CN/SAN匹配主机名
如果不想完全禁用验证,更安全的做法是调整你导入的证书:
- 用
keytool工具重新生成证书,把Common Name(CN)改成你要访问的主机名(比如localhost或者开发环境的服务器IP) - 或者给证书添加Subject Alternative Name(SAN)扩展,包含所有你需要访问的主机名/IP
这样证书就能通过主机名验证,不用做任何禁用操作。
重要提醒
所有这些方案只适合开发环境,生产环境禁用主机名验证会导致中间人攻击风险,绝对不能这么做。
内容的提问来源于stack exchange,提问作者GSX
相关产品推荐
相关产品推荐

