首页 > 解决方案 > 带有 SSL 和自签名证书的 ActiveMQ;不包含正确证书的客户端能够连接到代理

问题描述

我有一些自签名证书,用于通过 ActiveMQ 和几个 Java 客户端使用 SSL/TLS。代理密钥库包含根证书代理信任库包含客户端的公钥客户端密钥库包含捆绑到 PKCS12 文件中的客户端公钥和私钥,根据密钥库的要求,客户端信任库包含根证书

现在,此配置工作正常。我的问题是,即使我使用不匹配的客户端证书和密钥但在代理和客户端保留相同的根证书,它也能正常工作。仅当我使用不匹配的根证书时,代理-客户端连接才会失败。我想知道为什么会发生这种情况以及解决方法是什么,以便使用任何随机密钥对的客户端,其公钥不驻留在代理的信任库中,因此无法连接到代理。

PS:这是在 ActiveMQ 5.13.0 版和 TLS 1.2 版上

标签: javasslactivemqself-signed-certificate

解决方案


它在 wiki 中:https ://cwiki.apache.org/confluence/display/ACTIVEMQ/How+do+I+use+SSL

您需要添加needClientAuth=true服务器端传输连接器:

<broker>
  ...
  <transportConnectors>
    <transportConnector name="ssl" uri="ssl://0.0.0.0:61616?needClientAuth=true"/>  
  </<transportConnectors>

要求客户端身份验证不是标准设置。通常,SSL 传输仅使用服务器证书设置,客户端使用用户名/密码身份验证。

客户端身份验证不提供任何额外的加密。它是用户名/密码的替代方案,但需要更高的维护:证书更新等。


推荐阅读