我创建了一个轻量级应用程序,该应用程序使用SSL连接到IBM MQ。

如果同时设置了javax.net.ssl.trustStorejavax.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

10-08 01:38