【问题标题】:IBM MQ 2538 error negotiating an SSL connectionIBM MQ 2538 错误协商 SSL 连接
【发布时间】:2020-01-12 07:52:35
【问题描述】:

我们有两个连接(作为 .NET/Windows 客户端)到 IBM MQ 端点(假设是非 Windows)。

我们使用 SSL,它由一对证书(客户端和服务器)支持并在 Windows 证书存储中正确标记,以确保我们选择正确的证书。

队列 A 中的一切正常。

队列 B 最近停止工作。我们现在得到一个 2538 错误。什么都没有改变。

  • 我们尽可能保持两个队列的两侧相同。
  • 我们已经对队列 A 和队列 B 进行了有线跟踪,并且可以确认由于客户端的“连接重置”,队列 B 上的 SSL 协商不完整
  • 所有证书均有效且有日期
  • 我们已尝试在各方之间使用高度信任的自签名证书

感觉可能是通信错误导致 SSL 握手失败。

我们使用的WebSphereMqClient NuGet 包(8.0.0.7 - 最新版本)加剧了这个问题,除了调用时出现 2538 错误之外没有给我们任何其他信息:

_mqQueueManager = new MQQueueManager((string)queueManager, (Hashtable)connectionProperties);

正在(编辑)的连接属性:

<IbmMqConnection server="ipaddress" 
                         portNumber="1234" 
                         channel="SOME.CHANNEL" 
                         queueManager="QUEUE_MANAGER">
    <SecureConnection enabled="True" 
                      cipherSuite="TLS_RSA_WITH_AES_256_CBC_SHA256" 
                      cipherSpec="TLS_RSA_WITH_AES_256_CBC_SHA256" 
                      peerName="CN=trusted-parties-cn"
                      certificateLabel="ibmwebspheremq"
                       />

有什么专家可以给我们一点线索吗?有没有办法从 NuGet 黑盒中获取任何诊断信息?

更新 1:

服务器正在运行 8.0.0.9。

更新 2:

@JoshMc 建议我打开日志记录。

从中,我了解到:

  • 它无法(正确地)在二进制文件夹或我的个人文件夹中找到mqclient.ini 文件。
  • 在 SSL 身份验证期间出现错误,特别是 System.ComponentModel.Win32Exception (0x80004005): The credentials supplied to the package were not recognized
  • 后面的主机貌似消失了:MQTCPConnection.ConnectSocket(string,string,MQLONG) rc=OK 00000174 10:29:28.917526 5748.1 CompCode: 2, Reason: 2538 AMQ9202: Remote host 'x.x.x.x(y)' not available, retry later.
  • 其中有 2538 CompCode: 2, Reason: 2538
  • 协商似乎仍在继续,使用适当的 TLS 版本等。
  • 然后在尝试获取客户端(使用我们的私钥)证书时,我们得到System.ComponentModel.Win32Exception (0x80004005): The credentials supplied to the package were not recognized

我已经仔细检查了用户确实拥有私钥的权限。

更新 3

发现问题。

文本System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure. 突出显示了该问题。经调查发现,在证书更新期间,私钥的权限已被删除。我知道上面说权限已确认存在,但证书不同。我把它留在里面是为了保留历史/诚实。

【问题讨论】:

  • 不工作的连接是否通过防火墙或 VPN 隧道?
  • 是的,并且路由与工作连接相同。我们已经让防火墙和网络团队进行了调查,但没有得出任何结论。我们必须假设这些是有效的。
  • 如果您想让他们打开来自 NuGet 的托管 MQ 客户端的跟踪,您需要遵循 Using the stand-alone IBM MQ .NET client 说明。基本上,您向app.config 文件添加一个条目,该文件指向您创建trace.config 文件的目录,该文件告诉它打开跟踪。这通常会更清楚地说明客户端 TLS 交互是什么。
  • -Djavax.net.debug=ssl 添加到 JVM 命令行参数中,mqipt 启动也可以提供有用的诊断消息。
  • 在您发布最后一条评论和答案之前,我正在写我的答案,希望我的回答对您有所帮助,您会考虑接受它。我现在也会对你的问题和答案进行投票,因为它们是很好的内容。

标签: .net ssl ibm-mq


【解决方案1】:

NuGet 包只是独立的 amqmdnet.dll,IBM 允许您从完整的 MQ 客户端安装或通过可再发行客户端 zip 文件下载。

如果您想让他们为独立的托管 .NET MQ 客户端打开跟踪,您需要按照Developing applications > Developing .NET applications > Writing and deploying IBM MQ .NET programs > Using the stand-alone IBM MQ .NET client 处的说明进行操作。

您首先将以下内容添加到您的 app.config 并将值指向您可以在其中创建文件的目录。

<appSettings>
<add key="MQTRACECONFIGFILEPATH" value="C:\MQTRACECONFIG" />
</appSettings>

然后您在上述目录中创建一个名为trace.config 的文件,其中包含以下内容,其中MQTRACEPATHMQERRORPATH指向运行您的应用程序的用户可以写入的目录。

<?xml version="1.0" encoding="utf-8"?>
<traceSettings>
  <MQTRACELEVEL>2</MQTRACELEVEL>
  <MQTRACEPATH>C:\MQTRACEPATH</MQTRACEPATH>
  <MQERRORPATH>C:\MQERRORLOGPATH</MQERRORPATH>
</traceSettings>

请注意,您可以在20 之间切换MQTRACELEVEL,以动态打开或关闭正在运行的程序的跟踪。


在 MQIPT 方面,如果您使用股票 mqipt.ske 启动您的 MQIPT 实例,您可以在启动 MQIPT 之前设置环境变量 MQIPT_JVM_OPTIONS="-Djavax.net.debug=ssl",这将导致 java 提供 TLS 调试日志记录到 mqipt.stdout.log in logs 目录。

【讨论】:

    【解决方案2】:

    按照@JoshMc 的建议,通过启用日志记录解决了问题。

    日志条目:

    000001C9 11:16:51.194536   2072.1      System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
    at IBM.WMQ.Nmqi.MQEncryptedSocket.MakeSecuredConnection()
    at IBM.WMQ.Nmqi.MQEncryptedSocket..ctor(NmqiEnvironment env, MQTCPConnection conn, Socket socket, MQChannelDefinition mqcd, MQSSLConfigOptions sslConfigOptions)
    at IBM.WMQ.MQTCPConnection.ConnectSocket(String localAddr, String connectionName, Int32 options)
    

    ... 直接将我们引向了问题,即用于访问 Windows 证书存储中的私钥的凭据无效。经调查,他们不在场。

    确保将此步骤作为更新 SSL 证书过程的一部分。

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2018-11-09
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 2020-09-18
      相关资源
      最近更新 更多