我们使用ActiveMQ来排队来自远程客户端的消息。
客户端使用以下URL连接到我们服务器上的ActiveMQ;
ssl://www.mydomain.com:61616
这在过去运作良好,由开发人员与公司建立时间较长。
最近我们不得不更新我们的SSL证书,因为旧证书已经用完了。我们成功地为我们的http服务器做了这个,但现在才意识到原始密钥库的副本仍然存在于ActiveMQ配置文件夹中。
我们尝试将新密钥库放入ActiveMQ配置文件夹中,覆盖旧密钥库。但是,这似乎不起作用,所有连接都被以下堆栈跟踪拒绝;
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at java.security.cert.CertPathBuilder.build(Unknown Source)
我们在这里做错了什么? 我们使用keytool -list命令列出了旧密钥库和新密钥库的内容,它们看起来非常相似(当然除了日期)。 我们需要对调用上面的url以接受我们的新密钥库的客户端进行其他更新吗?
答案 0 :(得分:0)
您的信任库可能与您的密钥库不同步。以下是从头开始设置的一般方法;您的配置会有所不同,因此请根据需要进行调整:
为每个客户端生成证书,并使用代理信任库注册客户端证书。
> keytool -genkey -alias producer -keyalg RSA -keystore myproducer.ks
> keytool -genkey -alias consumer -keyalg RSA -keystore myconsumer.ks
导出两个证书
> keytool -export -alias producer -keystore myproducer.ks -file producer_cert
> keytool -export -alias consumer -keystore myconsumer.ks -file consumer_cert
将证书导入生产者信任库(新文件)
> keytool -import -alias producer -keystore mybroker.ts -file producer_cert
> keytool -import -alias consumer -keystore mybroker.ts -file consumer_cert
将代理信任库复制到您原来的位置,通常是{ACTIVEMQ_HOME} / conf。您通常可以在代理配置中看到这一点:
<broker ...>
<sslContext>
<sslContext keyStore="file:${activemq.base}/conf/mybroker.ks"
keyStorePassword="test123"
trustStore="file:${activemq.base}/conf/mybroker.ts"
trustStorePassword="test123"/>
</sslContext>
</broker>