使用受信任的 CA 证书配置 Artemis SSL 客户端身份验证所需的步骤
Steps needed to configure Artemis SSL client authentication using trusted CA Certificates
根据 ActiveMQ Artemis 文档,可以使用受信任的 CA 进行 2 种 TLS 也就是客户端证书身份验证。请参阅下面的摘录。
双向 TLS 使用与单向 TLS 相同的 sslEnabled
、keyStorePath
和 keyStorePassword
属性,但它添加了 needClientAuth=true
来告诉客户端它应该出示自己的证书。例如:
<acceptor name="artemis">tcp://0.0.0.0:61616?sslEnabled=true;keyStorePath=../etc/broker.keystore;keyStorePassword=1234!;needClientAuth=true</acceptor>
此配置假定客户端的证书是由受信任的提供商签署的。如果客户端的证书不是由受信任的提供者签名的(例如,它是自签名的),那么服务器需要将客户端的证书导入到信任库中,并将 acceptor
配置为 trustStorePath
和 trustStorePassword
,例如:
<acceptor name="artemis">tcp://0.0.0.0:61616?sslEnabled=true;keyStorePath=../etc/broker.keystore;keyStorePassword=1234!</acceptor>
我目前的要求是完整的 2 路 SSL,客户端从我们的 CA 获取证书。根据文档,我的理解是每次用户注册时我们都不需要将客户端密钥添加到信任库中。注意:我们在 AMQP 协议上执行此操作。
在高层次上,设置将是:
- 将 CA 安装到 JRE
cacerts
密钥库。
- 为代理创建签名请求。
- CA 为代理创建证书。
- 将代理证书安装到密钥库中(例如
etc/broker-certs.p12
)
- 客户端创建证书签名请求
- CA 创建客户端证书。
- 客户端在连接时出示证书。
在进入 SSL 的兔子洞之前,我想检查一下我想要实现的目标是否有可能实现?
我尝试了 ssl-enabled-dual-authentication
示例,但是它在客户端启动时抛出异常。
Caused by: org.apache.activemq.artemis.api.core.ActiveMQConnectionTimedOutException: AMQ219013: Timed out waiting to receive cluster topology. Group:null
FOR JDK 11+ 用户: 要试用 ssl-enabled-dual-authenticaion 示例,您需要重新创建所有证书。评论部分有更多细节。
是的,这是可能的,而且您的“高级”步骤看起来不错。
查看代理附带的 ssl-enabled-dual-authentication
example 可能会有所帮助。它演示了如何使用自签名证书配置相互身份验证,包括用于创建、导入和导出各种 SSL 资源的 keytool
命令。这与涉及使用 CA 的用例略有不同,但该过程本质上是相同的。真正的区别在于,您不是将客户端的证书添加到代理的信任库,反之亦然,而是将 CA 的证书添加到所有 JVM。
根据 ActiveMQ Artemis 文档,可以使用受信任的 CA 进行 2 种 TLS 也就是客户端证书身份验证。请参阅下面的摘录。
双向 TLS 使用与单向 TLS 相同的 sslEnabled
、keyStorePath
和 keyStorePassword
属性,但它添加了 needClientAuth=true
来告诉客户端它应该出示自己的证书。例如:
<acceptor name="artemis">tcp://0.0.0.0:61616?sslEnabled=true;keyStorePath=../etc/broker.keystore;keyStorePassword=1234!;needClientAuth=true</acceptor>
此配置假定客户端的证书是由受信任的提供商签署的。如果客户端的证书不是由受信任的提供者签名的(例如,它是自签名的),那么服务器需要将客户端的证书导入到信任库中,并将 acceptor
配置为 trustStorePath
和 trustStorePassword
,例如:
<acceptor name="artemis">tcp://0.0.0.0:61616?sslEnabled=true;keyStorePath=../etc/broker.keystore;keyStorePassword=1234!</acceptor>
我目前的要求是完整的 2 路 SSL,客户端从我们的 CA 获取证书。根据文档,我的理解是每次用户注册时我们都不需要将客户端密钥添加到信任库中。注意:我们在 AMQP 协议上执行此操作。
在高层次上,设置将是:
- 将 CA 安装到 JRE
cacerts
密钥库。 - 为代理创建签名请求。
- CA 为代理创建证书。
- 将代理证书安装到密钥库中(例如
etc/broker-certs.p12
) - 客户端创建证书签名请求
- CA 创建客户端证书。
- 客户端在连接时出示证书。
在进入 SSL 的兔子洞之前,我想检查一下我想要实现的目标是否有可能实现?
我尝试了 ssl-enabled-dual-authentication
示例,但是它在客户端启动时抛出异常。
Caused by: org.apache.activemq.artemis.api.core.ActiveMQConnectionTimedOutException: AMQ219013: Timed out waiting to receive cluster topology. Group:null
FOR JDK 11+ 用户: 要试用 ssl-enabled-dual-authenticaion 示例,您需要重新创建所有证书。评论部分有更多细节。
是的,这是可能的,而且您的“高级”步骤看起来不错。
查看代理附带的 ssl-enabled-dual-authentication
example 可能会有所帮助。它演示了如何使用自签名证书配置相互身份验证,包括用于创建、导入和导出各种 SSL 资源的 keytool
命令。这与涉及使用 CA 的用例略有不同,但该过程本质上是相同的。真正的区别在于,您不是将客户端的证书添加到代理的信任库,反之亦然,而是将 CA 的证书添加到所有 JVM。