我有一些自签名证书,可以通过 ActiveMQ 和几个 Java 客户端使用 SSL/TLS。 代理 keystore 包含根证书,代理信任库包含客户端的公钥。 客户端 keystore 包含根据 keystore 的要求捆绑到 PKCS12 文件中的客户端公钥和私钥,并且客户端信任库包含<强>根证书
现在,这个配置工作正常。我的问题是,即使我使用不匹配的客户端证书和 key ,但在代理和客户端上保留相同的根证书,它也能正常工作。 仅当我使用不匹配的根证书时,代理客户端连接才会失败。 我想知道为什么会发生这种情况以及解决方法是什么,以便阻止使用任何其公钥不在代理的信任库中的随 secret 钥对的客户端连接到代理。
附注:这是在 ActiveMQ 版本 5.13.0 和 TLS 版本 1.2 上的
最佳答案
它在维基中:https://cwiki.apache.org/confluence/display/ACTIVEMQ/How+do+I+use+SSL
您需要在服务器端transportConnector中添加needClientAuth=true
:
<broker>
...
<transportConnectors>
<transportConnector name="ssl" uri="ssl://0.0.0.0:61616?needClientAuth=true"/>
</<transportConnectors>
要求客户端身份验证不是标准设置。通常,SSL 传输仅使用服务器证书进行设置,客户端使用用户名/密码身份验证。
客户端身份验证不提供任何额外的加密。它是用户名/密码的替代方案,但需要更高的维护:证书续订等。
关于java - 具有 SSL 和自签名证书的 ActiveMQ;不包含正确证书的客户端能够连接到代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62449847/