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

Quarkus RabbitMQ Connector客户端证书认证配置方法咨询

Quarkus RabbitMQ Connector 客户端证书认证实现方案

核心结论

Quarkus RabbitMQ Connector完全支持客户端证书认证(对等TLS验证),你的方案完全可行,不需要混淆服务器与客户端证书,只需分别配置信任库(验证服务器)和密钥库(提供客户端证书)即可,也可以直接使用PEM格式证书无需转换密钥库。


实现步骤

1. 证书处理(两种可选方式)

方式一:转换为Java密钥库(PKCS12格式)

适合用Quarkus原生配置项快速搭建:

  • 信任库(验证服务器证书):将服务器crt导入PKCS12信任库

    keytool -import -alias rabbitmq-server -file server.crt -keystore truststore.p12 -storetype PKCS12
    

    按提示输入信任库密码,确认导入证书。

  • 密钥库(提供客户端证书):将包含证书链和加密私钥的client.pem转换为PKCS12密钥库

    openssl pkcs12 -export -in client.pem -out keystore.p12 -name rabbitmq-client
    

    输入密钥库密码,若私钥有加密密码需额外输入。

方式二:直接使用PEM格式证书

适合自定义Vert.x客户端,无需转换格式,直接加载原始文件。


2. 配置实现(两种对应方式)

方式一:Quarkus原生配置(application.properties)

直接通过配置项指定密钥库和信任库:

# 开启TLS连接
quarkus.rabbitmq.client.connection-uri=amqps://<rabbitmq-host>:5671

# 信任库配置(验证服务器身份)
quarkus.rabbitmq.client.ssl.enabled=true
quarkus.rabbitmq.client.ssl.trust-store=classpath:truststore.p12
quarkus.rabbitmq.client.ssl.trust-store-password=你的信任库密码
quarkus.rabbitmq.client.ssl.trust-store-type=PKCS12

# 密钥库配置(提供客户端证书)
quarkus.rabbitmq.client.ssl.key-store=classpath:keystore.p12
quarkus.rabbitmq.client.ssl.key-store-password=你的密钥库密码
quarkus.rabbitmq.client.ssl.key-store-type=PKCS12
# 若私钥有单独加密密码,需添加此配置
quarkus.rabbitmq.client.ssl.key-password=你的私钥密码

# 启用对等验证(强制服务器验证客户端证书)
quarkus.rabbitmq.client.ssl.verify-hostname=true
方式二:自定义Vert.x RabbitMQ客户端

适合更精细的SSL控制,直接加载PEM文件:

import io.quarkus.rabbitmq.client.RabbitMQClient;
import io.vertx.core.Vertx;
import io.vertx.core.net.PemTrustOptions;
import io.vertx.core.net.PemKeyCertOptions;
import io.vertx.rabbitmq.RabbitMQOptions;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;

@ApplicationScoped
public class CustomRabbitMQClientProducer {

    @Produces
    public RabbitMQClient customRabbitMQClient(Vertx vertx) {
        RabbitMQOptions options = new RabbitMQOptions();
        options.setUri("amqps://<rabbitmq-host>:5671");
        
        // 加载服务器证书到信任库
        PemTrustOptions trustOptions = new PemTrustOptions()
                .addCertPath("path/to/server.crt");
        
        // 加载客户端证书与私钥(PEM文件包含两者时只需指定一次路径)
        PemKeyCertOptions keyCertOptions = new PemKeyCertOptions()
                .addKeyPath("path/to/client.pem")
                .addCertPath("path/to/client.pem")
                .setKeyPassword("你的私钥密码"); // 若私钥加密需添加
        
        options.setSsl(true);
        options.setTrustOptions(trustOptions);
        options.setKeyCertOptions(keyCertOptions);
        options.setVerifyHostname(true);
        
        return RabbitMQClient.create(vertx, options);
    }
}

关键注意事项

  • 需确保RabbitMQ Broker端已开启对等验证配置(如启用verify_peer= true和fail_if_no_peer_cert= true),否则客户端证书不会被校验。
  • 若使用自定义客户端,需确保Quarkus自动发现该Producer,无需额外配置即可注入使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:15:06