WSO2 EI 6.4.0容器内API调用SSLPeerUnverifiedException错误求助
解决建议:WSO2 EI 6.4.0内部API调用SSL主机名验证失败
错误原因分析
报错javax.net.ssl.SSLPeerUnverifiedException: SSL peer failed hostname validation for name: null的核心原因是HAProxy更新证书后,WSO2 EI发起SSL请求时无法验证证书的主机名有效性,具体可能为:
- 新证书的CN(通用名称)或SAN(主题备用名称)未包含目标域名
integ.company.com - WSO2 EI的客户端信任库未导入新的HAProxy证书
- 主机名验证逻辑配置与证书不匹配
具体解决步骤
校验HAProxy新证书的域名配置
执行命令提取证书详情:openssl x509 -in /path/to/haproxy/new-cert.pem -text -noout重点检查:
Subject字段中的CN是否等于integ.company.comX509v3 Subject Alternative Name是否包含DNS:integ.company.com
若以上项缺失或不匹配,需重新生成包含正确域名的SSL证书。
将新证书导入WSO2 EI信任库
WSO2 EI默认使用客户端信任库存储可信证书,操作步骤:- 导出HAProxy的公证书:
openssl s_client -connect integ.company.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > haproxy-new.crt - 导入证书到信任库(默认密码为
wso2carbon):keytool -importcert -file haproxy-new.crt -alias haproxy-integ -keystore <EI_HOME>/repository/resources/security/client-truststore.jks -storepass wso2carbon - 重启WSO2 EI Docker容器,使信任库更新生效。
- 导出HAProxy的公证书:
调整WSO2 EI的主机名验证策略
编辑<EI_HOME>/repository/conf/axis2/axis2.xml中的HTTPSender配置:- 生产环境(推荐):启用严格验证,确保证书域名与调用地址完全匹配
<transportSender name="https" class="org.apache.synapse.transport.passthru.PassThroughHttpSSLSender"> <parameter name="HostnameVerifier">StrictHostnameVerifier</parameter> <!-- 其他参数保持不变 --> </transportSender> - 测试环境(临时绕过):允许所有主机名验证(仅限测试,生产禁止)
<parameter name="HostnameVerifier">AllowAllHostnameVerifier</parameter>
- 生产环境(推荐):启用严格验证,确保证书域名与调用地址完全匹配
检查API调用的Endpoint配置
确认API-1中调用API-2的Endpoint URL无拼写错误,若为容器内部调用,可考虑:- 使用容器内部IP或服务名(如
http://api2-service:8280/wso2/api/queue_service),避免依赖外部HAProxy的SSL证书 - 若必须使用HTTPS,确保内部DNS能正确解析
integ.company.com到HAProxy地址
- 使用容器内部IP或服务名(如
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

