Quarkus 反应式消息传递rabbitmq 连接器,具有客户端证书身份验证

问题描述 投票:0回答:1

我想使用 Quarkus RabbitMQ Connector 连接到 RabbitMQ Broker(队列)。客户需要同行验证和客户端证书身份验证(而不是用户名/密码)。不幸的是,我找不到如何配置客户端证书的示例。

在Quarkus的描述中,我发现他的Vert.x RabbitMQ客户端是可以定制的(https://quarkus.io/guides/rabbitmq-reference#customizing-the-underlying-rabbitmq-client)。我有 .crt 形式的服务器证书(运行 RabbitMQ 代理的位置)和 .key 文件形式的密钥文件。我还有 .pem 文件形式的客户端证书,其中包含证书链和加密的私钥。
------开始证书-----
计算机紧急响应小组
-----证书结束-----
-----开始证书-----
计算机紧急响应小组
-----证书结束-----
-----开始证书-----
计算机紧急响应小组
-----证书结束-----
-----开始加密私钥-----
-----加密私钥结束-----

有人有客户端证书认证和RabbitMQ的经验吗?

我目前不确定客户端证书身份验证是否适用于 Quarkus 和 RabbitMQ 连接器。对于底层 vert.x 客户端,我只能配置一个信任库(https://vertx.io/docs/vertx-rabbitmq-client/java/#_jks_trust_store_option)。我在那里设置了服务器证书文件和密码。或者我应该创建一个自己的密钥库,其中包含服务器证书和客户端证书?这可能吗?

java rabbitmq quarkus quarkus-reactive
1个回答
0
投票

无需对等验证的 TLS 连接

不需要需要服务器的私钥!这将违背服务器保密的目的。

如果您的 RabbitMQ 服务器(或放置在其前面的代理,用于终止 TLS 流量)使用自签名证书(未由受信任的 CA 签名),则需要将此配置部分添加到您的 RabbitMQ 客户端:

PemTrustOptions trust = new PemTrustOptions().addCertPath("./tlc/ca.crt");
RabbitMQOptions options = new RabbitMQOptions()
    .setSsl(true)
    .setPemTrustOptions(trust)
    // ... the rest of configuration options

其中

./tlc/ca.crt
包含已签署服务器证书的 CA 的公钥(也称为证书)。

我建议首先尝试在没有客户端证书的情况下完成这项工作。

启用对等验证

如果要启用对等验证,则必须向 RabbitMQ 客户端提供客户端的私钥和公钥,如下所示:

PemKeyCertOptions keycert = new PemKeyCertOptions()
    .addCertPath("./tls/tls.crt")
    .addKeyPath("./tls/tls.key");
RabbitMQOptions options = new RabbitMQOptions()
    .setSsl(true)
    .setPemKeyCertOptions(keycert)
    // ... the rest of configuration options

其中

./tls/tls.crt
是公钥,
./tls/tls.key
是您的客户端证书的私钥。

此外,请确保 RabbitMQ 配置为对等验证。如果您的 RabbitMQ 服务器不处理 TLS 流量,请阅读如何在更高一层执行此操作(如果您的 RabbitMQ 服务器位于 HaProxy、Nginx 等后面)。

如果您的客户端证书是自签名的,您需要通知服务器(RabbitMQ 或 TLS 终止代理)它可以信任。建立这种信任的具体步骤超出了本文的范围。

© www.soinside.com 2019 - 2024. All rights reserved.