JBoss EAP 7.4.0独立模式SSL WebService客户端配置求助
JBoss EAP 7.4.0 客户端SSL认证配置示例(适配外部WebService调用)
一、Elytron安全子系统核心配置
JBoss EAP 7.x 依赖Elytron处理SSL安全,需在standalone.xml的<subsystem xmlns="urn:jboss:domain:elytron:1.0">节点下添加以下配置片段:
1. 客户端密钥库配置
<key-stores> <key-store name="ClientAuthKeyStore"> <!-- 替换为你的.jks密钥库密码 --> <credential-reference clear-text="your-keystore-password"/> <implementation type="JKS"/> <!-- 将密钥库文件放在JBOSS_HOME/standalone/config目录下,或者修改relative-to指向正确路径 --> <file path="client-auth.jks" relative-to="jboss.server.config.dir"/> </key-store> </key-stores>
2. 信任库配置(已导入.cer证书的cacerts)
<key-stores> <!-- 若已有key-stores节点,直接追加该key-store即可 --> <key-store name="ClientTrustStore"> <!-- cacerts默认密码为changeit,若已修改请替换 --> <credential-reference clear-text="changeit"/> <implementation type="JKS"/> <file path="cacerts" relative-to="jboss.home.dir"/> </key-store> </key-stores>
3. SSL上下文、密钥管理器、信任管理器配置
<!-- 密钥管理器:指定要使用的客户端证书别名 --> <key-managers> <key-manager name="ClientAuthKeyManager" key-store="ClientAuthKeyStore"> <credential-reference clear-text="your-keystore-password"/> <!-- 替换为密钥库中客户端证书的实际别名,必须与服务端要求一致 --> <alias-filter alias="your-client-cert-alias"/> </key-manager> </key-managers> <!-- 信任管理器 --> <trust-managers> <trust-manager name="ClientTrustManager" key-store="ClientTrustStore"/> </trust-managers> <!-- SSL上下文:关联密钥和信任管理器,指定TLS协议 --> <ssl-contexts> <ssl-context name="ClientSSLContext" key-manager="ClientAuthKeyManager" trust-manager="ClientTrustManager"> <protocols> <protocol name="TLSv1.2"/> <protocol name="TLSv1.3"/> </protocols> <cipher-suite selector="DEFAULT"/> </ssl-context> </ssl-contexts>
二、WebService客户端绑定SSL上下文
在standalone.xml的<subsystem xmlns="urn:jboss:domain:webservices:2.0">节点下添加客户端配置,让WebService调用使用上述SSL上下文:
<client-config> <config-name>ExternalWebServiceClientConfig</config-name> <ssl-context>ClientSSLContext</ssl-context> </client-config>
之后在Java代码的WebService客户端中,指定使用该配置名称即可(以JAX-WS为例):
// 创建服务实例 YourWebServiceService service = new YourWebServiceService(); YourWebService port = service.getYourWebServicePort(); // 绑定JBoss客户端配置 ((BindingProvider) port).getRequestContext().put("javax.xml.ws.service.endpoint.address", "https://external-webservice-url"); ((BindingProvider) port).getRequestContext().put("org.jboss.ws.config.configName", "ExternalWebServiceClientConfig");
三、关键排查点
- 用
keytool -list -v -keystore client-auth.jks确认密钥库中的证书别名,必须与alias-filter配置的完全一致 - 若密钥库中证书有单独的密钥密码,需在
key-manager节点中追加:<key-credential-reference clear-text="your-key-password"/> - 验证cacerts中已正确导入服务端证书:
keytool -list -v -keystore $JBOSS_HOME/jre/lib/security/cacerts | grep "服务端证书别名" - 开启SSL调试日志定位问题:在
<subsystem xmlns="urn:jboss:domain:logging:8.0">中添加
<logger category="javax.net.ssl"> <level name="DEBUG"/> </logger>
内容的提问来源于stack exchange,提问作者1977
相关产品推荐
相关产品推荐

