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

如何在Helidon MP 2.3.1中无需磁盘存储证书配置mTLS?

在Helidon MP 2.3.1中通过Java证书对象配置mTLS(无需磁盘存储)

可以完全脱离磁盘存储来配置mTLS,直接使用已有的KeyStore、PrivateKey、X509Certificate等Java证书对象完成配置,无需依赖server.sockets.0.tls.trust.keystore-path这类文件路径配置项。以下是具体实现方式:

一、服务器端mTLS配置

通过直接构建TlsConfig对象,注入已有的证书/密钥对象,替代文件路径配置:

import io.helidon.microprofile.server.Server;
import io.helidon.tls.*;

import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;

public class MtlsServerInitializer {
    public static void main(String[] args) {
        // 假设已从内存或其他渠道获取以下证书对象
        KeyStore serverTrustStore = ...; // 服务器信任库对象
        char[] trustStorePass = ...; // 信任库密码(若有)
        KeyStore serverKeyStore = ...; // 服务器密钥库对象
        char[] keyStorePass = ...; // 密钥库密码
        PrivateKey serverPrivateKey = ...; // 服务器私钥
        X509Certificate[] serverCertChain = ...; // 服务器证书链

        // 构建TLS配置
        TlsConfig tlsConfig = TlsConfig.builder()
                .trust(TrustConfig.builder()
                        .keyStore(serverTrustStore)
                        .trustStorePassword(trustStorePass)
                        .build())
                .privateKey(PrivateKeyConfig.builder()
                        .keyStore(serverKeyStore)
                        .keyPassword(keyStorePass)
                        .privateKey(serverPrivateKey)
                        .certChain(serverCertChain)
                        .build())
                .clientAuth(ClientAuth.REQUIRED) // 启用强制客户端认证(mTLS核心)
                .build();

        // 启动服务器并应用自定义TLS配置
        Server server = Server.builder()
                .port(8443)
                .tlsConfig(tlsConfig)
                .build()
                .start();
    }
}

二、客户端mTLS配置

客户端同样可以直接使用证书对象构建TlsConfig,无需依赖磁盘文件:

import io.helidon.webclient.WebClient;
import io.helidon.tls.*;

import java.security.KeyStore;

public class MtlsClientInitializer {
    public static void main(String[] args) {
        // 已获取的客户端证书对象
        KeyStore clientKeyStore = ...;
        char[] clientKeyStorePass = ...;
        KeyStore clientTrustStore = ...;
        char[] clientTrustStorePass = ...;

        TlsConfig clientTlsConfig = TlsConfig.builder()
                .keyConfig(KeyConfig.builder()
                        .keyStore(clientKeyStore)
                        .keyPassword(clientKeyStorePass)
                        .build())
                .trust(TrustConfig.builder()
                        .keyStore(clientTrustStore)
                        .trustStorePassword(clientTrustStorePass)
                        .build())
                .build();

        // 构建启用mTLS的WebClient
        WebClient client = WebClient.builder()
                .baseUri("https://localhost:8443")
                .tlsConfig(clientTlsConfig)
                .build();

        // 发起请求示例
        String response = client.get()
                .path("/demo")
                .request(String.class)
                .await();
    }
}

三、关键注意事项

  • 确保证书对象已正确加载(比如从内存字节流、密钥管理服务等非磁盘渠道获取),密码与密钥库/私钥匹配。
  • 在CDI环境中,可将构建好的TlsConfig注册为CDI Bean,实现依赖注入式配置,替代配置文件中的路径项。
  • 若需兼容原有配置文件逻辑,可通过自定义ConfigSource覆盖TLS相关配置节点,将文件路径替换为内存对象的引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:35:23