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
相关产品推荐
相关产品推荐

