我创建了一个轻量级应用程序,该应用程序使用SSL连接到IBM MQ。
如果同时设置了javax.net.ssl.trustStore
和javax.net.ssl.keyStore
,则一切正常。
密钥库(jks)包含两个条目:
可信证书入口
私钥项
考虑到我是该连接的客户端,而MQ是服务器,我有一种感觉,应该仅使用trustStore,但这不是这种情况,因为如果仅设置trustStore,应用程序将无法正常工作。
谁能解释我为什么都需要?
最佳答案
根据SSL configuration of the Websphere MQ Java/JMS client指南,指向第2点。创建keyStore您很可能使用证书进行客户端身份验证。此身份验证设置需要一个keyStore:
仅当与队列管理器建立连接时希望进行客户端身份验证时,才完成本节。如果尚未在通道上指定客户端身份验证,则无需完成本节。
除了存储客户端的个人证书,并且JSSE要求访问密码外,keyStore本质上与trustStore相同。实际上,您可以将您的个人证书添加到之前创建的trustStore中,它将同时用作trustStore和keyStore,但是现在不需要将以前不需要的密码传递给JSSE,以便它可以访问您的个人证书。
您可以通过运行以下命令在服务器上进行验证,如Using self-signed certificates for mutual authentication of a client and queue manager指南所示:
DISPLAY CHSTATUS(<your channel name>) SSLPEER SSLCERTI