You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于JAX-WS的POJO HTTPS客户端简易配置方案问询

JAX-WS HTTPS客户端基于服务端证书配置方案(JDK 17)

步骤1:将服务端证书导入客户端信任库

首先创建仅包含服务端证书的客户端信任库(避免直接使用服务端密钥库,符合生产安全规范),执行以下keytool命令:

# 导出服务端证书(若未导出)
keytool -exportcert -keystore server-keystore.jks -alias server-key -file server.crt -storepass 服务端密钥库密码

# 将证书导入客户端信任库
keytool -importcert -file server.crt -keystore client-truststore.jks -alias server-cert -storepass 客户端信任库密码

执行导入命令时,输入yes确认信任该证书。

步骤2:在客户端代码中配置SSL上下文

提供两种配置方式,按需选择:

方式一:系统属性配置(简便,适合快速验证)

在客户端初始化前替换原有系统属性,仅指定信任库:

// 仅配置客户端信任库,无需暴露服务端密钥
System.setProperty("javax.net.ssl.trustStore", "/path/to/client-truststore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "客户端信任库密码");

// 正常初始化JAX-WS服务与端口
YourService service = new YourService();
YourPortType port = service.getYourPort();
// 调用服务方法
port.yourServiceMethod();

方式二:代码构建SSL上下文(灵活,适合生产环境)

不依赖全局系统属性,自定义SSL上下文并绑定到JAX-WS端口:

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
import javax.xml.ws.BindingProvider;
import com.sun.xml.ws.developer.JAXWSProperties;
import java.io.FileInputStream;
import java.security.KeyStore;

// 加载客户端信任库
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
try (InputStream trustStoreStream = new FileInputStream("/path/to/client-truststore.jks")) {
    trustStore.load(trustStoreStream, "客户端信任库密码".toCharArray());
}

// 初始化信任管理器
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);

// 创建TLS上下文
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);

// 初始化JAX-WS服务并绑定SSL上下文
YourService service = new YourService();
YourPortType port = service.getYourPort();

BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY, sslContext.getSocketFactory());

// 调用服务方法
port.yourServiceMethod();

注意事项

  • 确保POM引入JDK 17兼容的JAX-WS依赖:
    <dependencies>
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-rt</artifactId>
            <version>2.3.5</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.ws</groupId>
            <artifactId>jaxws-api</artifactId>
            <version>2.3.1</version>
        </dependency>
    </dependencies>
    
  • 确认客户端访问地址与服务端证书的CN/SAN字段匹配,避免SSL握手失败
  • 生产环境建议通过配置文件加载信任库路径和密码,禁止硬编码

内容的提问来源于stack exchange,提问作者anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:42:26