关于“我的客户端上的密钥库仅在应用程序的个人证书”的位,令人担忧。这是行不通的。客户端KDB 必须有有服务器的公钥。如果MQ服务器具有SSLCAUTH(OPTIONAL)
,则服务器的公共证书是KDB中所需的全部功能,以使连接成功。
TLS握手的第一部分是在客户端验证服务器的证书。公钥/私钥对的使用是如何保证对方事物的真实性。为了发生这种情况,服务器必须拥有自己的个人证书,并且客户端必须拥有签署者链根的公钥。对于自签证书,个人证书的公开部分必须由客户信任。对于CA签名的证书,CA Root必须受到客户端的信任。它是哪一个,用来签署服务器的个人证书客户必须信任的东西,或者证书不能被验证。
TLS握手是对称的,所以第二部分与第一部分完全相同,但角色相反。因此,在启用双向身份验证的情况下,客户端必须拥有自己的个人证书(因为该证书包含私钥),并且服务器必须信任与客户端匹配的公钥的任何签名。如果客户证书是自签名的,QMgr必须信任它。如果客户的证书是CA签名的,QMgr必须信任签名者。无论哪种方式,QMgr必须有一个证书来验证客户端的KDB。
遵循此逻辑,对于匿名客户端连接,所需的部分是QMgr密钥库中的个人证书(因为它包含QMgr的私钥)以及客户端KDB或Java Trust Trust中匹配的可信证书。这些都不是可选的。
如果要对客户端进行身份验证,则仍然需要与匿名客户端相同的两个证书,因为握手部分必须在客户端通过身份验证之前完成。此外,现在你还需要在客户端拥有自己的个人证书(因为它包含了客户端的私钥)和QMGR现在需要信任任何签署了客户端证书 - 客户端证书如果自签名或签名的根,如果CA -签。
作为一个方面说明,也有在后一些混乱,因为它说,“我的WMQ 7.5客户端应用程序是C代码和WMQ服务器运行Java。”在服务器端使用Java的队列管理器中没有任何内容。有些Java组件可以用来管理JNDI对象并运行示例代码。在现代MQ版本中,Java运行Web控制台。但QMgr本身没有Java组件,传入通道连接请求的路径中没有Java组件。 QMgr的听众,代理商和其他内部流程都受到了限制。因此,我不能确定那里提到的是什么,除了在MQ服务器端运行的Java以及参与TLS握手的概念可能是该帖子中提到的一些混淆的来源。 ;-)
您客户端的密钥库有个人证书。个人证书是一对密钥。有公共部分和私人部分。公共部分可以用来验证服务器的信任。 – Alaine