1

由于以下问题,目前我在连接服务器时遇到问题:

当我尝试连接到服务器时,它返回了一个错误:MQRC_SSL_INITIALIZATION_ERROR

通过WireShark仔细分析后,我发现客户端正在尝试使用SSL v2连接到服务器,而服务器只能接受SSL V3,从而拒绝连接。

我检查了文档,但找不到任何有关 .Net 客户端支持的 SSL 版本的信息。

我想检查 SSL 版本是否由 .Net MQ 客户端控制,如果是,我们如何配置以使其通过 SSL v3 连接?

谢谢。

4

1 回答 1

6

我不确定我是否同意您的结论,因为 WMQ至少从 V6.0开始支持 SSL V3.0 和 TLS V1.0 ,可能更早。这更有可能是客户端和服务器之间的配置不匹配。我建议解决 SSL/TLS 问题的过程如下:

我在 WMQ 上调试 SSL 连接的方法是按照以下顺序进行,确保每个步骤在进行下一步之前都有效:

  1. 让通道在没有 SSL 的情况下运行。这将验证通道名称是否拼写正确、端点之间存在网络路由、QMgr 的侦听器正在运行以及客户端是否指向正确的端口。您会惊讶于有多少次有人输入错误的端口或通道名称。
  2. 让通道在 SVRCONN 定义设置为 的情况下运行SSLCAUTH(OPTIONAL)。这将执行与您的浏览器类似的匿名 SSL 连接。QMgr 向客户端提供证书,但客户端没有义务发回证书。这验证了 QMgr 可以找到它的证书,并且客户端可以找到它的信任存储并正确验证 QMgr 的证书。(注意:QMgr 将始终请求客户端证书,如果存在,客户端将始终发送它。要执行此测试,请使用具有签名者证书但不包含应用程序个人证书的客户端密钥库的副本。复制keystore并从副本中删除个人证书。请勿删除原始!
  3. 将 SVRCONN 通道设置为SSLCAUTH(REQUIRED)。这现在需要客户端找到它的密钥库(在最后一步中它只需要它的信任库)并能够找到它的证书。它还要求 QMgr 能够验证客户端的证书。
  4. 设置 SSLPEER 或 CHLAUTH 映射规则以缩小将在通道上接受的已验证证书的数量。

第 2 步和第 3 步之间的区别有助于通过一次仅在一个方向上测试 SSL 凭证交换来隔离问题。这使您可以确定问题是存在于个人证书还是公共证书中,以及在通道的哪一侧。几乎所有的问题都在这两步中得到解决。

更新
注释以回答问题。SSL/TLS 使用两种类型的证书。个人证书包含私钥,并且不会被传递。公开证书是包含公钥的证书,可以自由发放。私钥保存在密钥库中。公钥(通常是 CA 的根证书和中间证书)存储在信任库中。在某些情况下,这些是单独的文件。例如,在 Java 和 JMS 中,JSSE 提供程序在环境中查找指向密钥库和信任库的变量。在 Java 和 JMS 中,密钥库和信任库变量可能指向同一个文件。

对于 Java 以外的 WebSphere MQ 服务器和客户端,密钥库和信任库合并到一个位置。通常称为 kdb 文件,它实际上是一个 CMS 密钥数据库,由多个文件组成,其中一个是 KDB。在这种情况下,“密钥库”实际上是组合密钥库和信任库的简写。对于 .Net 客户端,在MQEnviornment中设置密钥库位置和其他 SSL 属性。

在 SSL/TLS 握手中,服务器总是发送其公共证书以响应连接请求。然后,客户端必须通过首先检查签名和有效日期来验证该证书,然后在其信任库中查找签署该证书的内容。如果签署证书的东西是中间签署者证书(它本身已被某物签署),那么搜索将继续沿着签署者证书链向上直到到达根证书。假设服务器已通过身份验证,则通过让客户端提供证书并由服务器验证它来反向应用相同的过程。

当过程在步骤 #2 中失败时,我们可以使用上述过程的知识进行调试。QMgr 必须首先在其密钥库中找到其证书并将其呈现给客户端。如果 QMgr 找不到它的证书,结果是 AMQERR01.LOG 文件中的错误说明了这一点。当事情在第 2 步中消失时,请始终首先查看 QMgr 方面!

如果 QMgr确实找到了它的证书,那么下一步是客户端必须能够找到它的信任库,然后在该信任库中必须找到必要的签名者证书链。如果这失败了,客户端应该有错误来表明这一点。例如,设置客户端环境时的一个常见错误是指定整个文件名,包括 .kdb 扩展名。发生这种情况时,QMgr 会查找[keystorename].kdb.kdb不存在的内容。另一个常见错误是个人证书存在于密钥库中但标签错误。非 Java WMQ 客户端通过标签名称查找证书,该标签名称由文字字符串ibmwebspheremq后跟小写的用户 ID 构成。例如,如果我的用户 ID 是,TRob那么我的证书标签将是ibmwebspheremqtrob. 请注意,这是密钥库中的证书标签,而不是证书公用名或专有名称中的其他字段。

根据使用的客户端类型,这些可能位于 Windows 错误日志、本地 MQ 错误日志或其他位置。如果您找不到客户端错误,WMQ 跟踪也是一种选择。

于 2012-10-16T20:45:15.393 回答