首页 文章

Websphere MQ Server和Client之间的SSL / TLS握手

提问于
浏览
1

我'm debugging SSL errors between Websphere MQ Server and Client using T.Rob'的建议和需要帮助理解SSL握手(SSL connect to MQ using .net mq client SSLV3?) .

我的WMQ 7.5客户端应用程序是C代码并使用密钥库(.kdb) . 使用WebSphere管理员提供的CHLTAB . WMQ服务器正在运行Java,并且通过相互身份验证定义了通道 .

该文章指出,在SSL / TLS握手中,服务器始终发送其公共证书以响应连接请求 . 然后,客户端必须首先检查签名和有效日期,然后在其信任存储区中查找签署证书的内容,以验证该证书 .

这是我的困惑:由于我客户端的密钥库只有应用程序个人证书,客户端如何验证服务器发送的公共证书?我已经将我的应用程序证书的公共名称提供给WebSphere服务器管理员,但仅此而已 .

在此先感谢您的澄清!

1 回答

  • 2

    关于"my keystore on the client side has only the application personal cert"的一点令人不安 . 那不行 . 客户端KDB必须具有服务器的公钥 . 如果MQ服务器具有 SSLCAUTH(OPTIONAL) ,则KDB中所需的服务器's public cert is all that'成功连接 .

    TLS握手的第一部分是客户端验证服务器证书的位置 . 公钥/私钥对的使用是如何确保另一方的事物的真实性 . 为了实现这一点,服务器必须拥有自己的个人证书,并且客户端必须具有签名者链的根的公钥 . 在自签名证书的情况下,客户必须信任个人证书的公共部分 . 对于CA签名的证书,客户端必须信任CA Root . 无论它是哪一个,客户端必须信任用于签署服务器的东西's personal cert or that cert can' t得到验证 .

    TLS握手是对称的,因此第二部分与第一部分完全相同,但角色是相反的 . 因此,在启用相互身份验证的情况下, client 必须拥有自己的个人证书(因为它包含私钥),并且 server 必须信任签名的客户端's matching public key. If the client cert is self-signed the QMgr has to trust it. If the client'证书是CA签名的,QMgr必须信任签名者 . 无论哪种方式,QMgr都必须有一个证书来验证其KDB中的客户端 .

    遵循此逻辑,对于匿名客户端连接,所需部分是QMgr密钥库中的个人证书(因为它包含QMgr的私钥),以及客户端KDB中的匹配可信证书或Java信任存储中的匹配可信证书 . 这些都不是可选的 .

    如果要对客户端进行身份验证,则仍需要与匿名客户端相同的两个证书,因为在对客户端进行身份验证之前必须完成握手的这一部分 . 此外,现在您还需要客户端拥有自己的个人证书(因为它包含客户端的私钥),QMgr现在需要信任签署客户端证书的任何内容 - 客户端证书(如果是自签名的)或签名者root(如果CA) -签 .


    作为旁注,帖子中也存在一些混淆,因为它说“我的WMQ 7.5客户端应用程序是C代码而WMQ服务器正在运行Java” . 队列管理器中没有任何东西在服务器端使用Java . 安装了Java组件来执行诸如管理JNDI对象和运行示例代码之类的操作 . 在现代MQ版本中,Java运行Web控制台 . 但是QMgr本身没有Java组件,传入通道连接请求的路径中没有Java组件 . QMgr的倾听者,代理人和其他内部流程都在讨论这一切 . 所以除了在MQ服务器端运行并参与TLS握手的Java的概念可能是帖子中提到的一些混淆的来源之外,我完全不确定那里提到的是什么 . ;-)

相关问题