我在Debian Docker容器(Kubernetes)中有一个使用Java 8的Apache ActiveMQ 5.16.3示例。
它被配置为在/opt/activemq/conf/activemq.xml
中使用相互SSL:
<sslContext>
<sslContext
keyStore="/etc/data/my-bridge-broker.ks"
keyStorePassword="my-pass"
trustStore="/etc/data/broker_to_client.ts"
trustStorePassword="my-pass"
/>
</sslContext>
<!--- ... --->
<transportConnectors>
<transportConnector name="ssl" uri="ssl://0.0.0.0:61714?transport.enabledProtocols=TLSv1.2&transport.needClientAuth=true"/>
</transportConnectors>
mutual SSL工作正常,我可以使用ActiveMQSslConnectionFactory从示例Java客户机进行连接,ActiveMQSslConnectionFactory在信任库、密钥库和密码中提供适当的证书。
接下来,在代理运行时,我通过别名从服务器的信任存储区中删除客户端的证书:
cd /etc/data
keytool -delete -alias <client-cert-name> -keystore broker_to_client.ts -storepass my-pass
令人惊讶的是,客户端仍然能够连接。我重新启动了服务器,客户端仍然可以连接并在队列中发布消息。知道为什么吗?我以为信任存储定义了哪些客户端证书将被允许?
看看documentation,他们建议使用证书撤销列表(CRL)或在线证书状态协议(OCSP),但没有提到从信任库中删除的选项,这是否意味着ActiveMQ不使用信任库文件?
1条答案
按热度按时间bfnvny8b1#
如果客户的证书是由可信机构颁发的,那么它是否在经纪人的信任库中并不重要。客户的证书仍然是可信的,因为它来自一个 * 可信 * 机构。经纪人的信任库只是用来包含来自不可信机构或自签名的证书。