如何在HapiContext(Hapi-base 2.3)中配置SSL/TLS连接?
问题
我们在Spring Cloud Data Flow流中使用的一款Spring Boot应用,当前通过HapiContext构建HL7客户端,以非SSL/TLS的TCP连接发送HL7消息,代码如下:
@Autowired HapiContext context; Connection connection = context.newClient(host, Integer.parseInt(port), false); // The initiator which will be used to transmit our message Initiator initiator = connection.getInitiator(); Message response = initiator.sendAndReceive(adtMessage);
现需将该连接改为SSL/TLS加密方式,经多方检索未找到相关配置文档,求可行的实现方案。
实现方案
1. 核心改造思路
HAPI HL7的HapiContext原生支持SSL/TLS配置,核心是通过SslContextFactory定义SSL参数,并在创建连接时开启SSL模式。
2. 具体代码实现
场景一:服务端使用公网可信CA证书
如果服务端证书由主流CA签发,直接开启SSL模式即可,JVM默认信任库会自动验证证书:
@Autowired HapiContext context; // 将newClient第三个参数设为true,开启SSL/TLS Connection connection = context.newClient(host, Integer.parseInt(port), true); Initiator initiator = connection.getInitiator(); Message response = initiator.sendAndReceive(adtMessage);
场景二:服务端使用自签名/私有CA证书
如果服务端用的是自签名证书或私有CA签发的证书,需要手动加载信任库:
@Autowired HapiContext context; // 1. 配置SSL上下文工厂 SslContextFactory sslContextFactory = new SslContextFactory(); // 指定信任库路径(示例为classpath下的truststore.jks) sslContextFactory.setTrustStorePath("classpath:truststore.jks"); // 设置信任库密码 sslContextFactory.setTrustStorePassword("your-truststore-pass"); // 若需双向SSL认证,额外配置客户端密钥库 // sslContextFactory.setKeyStorePath("classpath:keystore.jks"); // sslContextFactory.setKeyStorePassword("your-keystore-pass"); // 2. 将SSL上下文注入HapiContext context.setSslContextFactory(sslContextFactory); // 3. 创建SSL连接 Connection connection = context.newClient(host, Integer.parseInt(port), true); Initiator initiator = connection.getInitiator(); Message response = initiator.sendAndReceive(adtMessage);
3. 关键注意事项
newClient的useTls参数设为true是开启SSL的核心开关。- 信任库文件需放置在Spring Boot应用的
src/main/resources目录下(或使用绝对路径)。 - 双向SSL认证场景下,需同时配置客户端密钥库,服务端会验证客户端身份。
内容的提问来源于stack exchange,提问作者Trainee Coder
相关产品推荐
相关产品推荐

