gpt4 book ai didi

.net - 协商 SSL 连接时出现 IBM MQ 2538 错误

转载 作者:太空宇宙 更新时间:2023-11-03 12:59:58 30 4
gpt4 key购买 nike

我们有两个连接(作为 .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,原因:2538
    AMQ9202:远程主机“x.x.x.x(y)”不可用,稍后重试。
  • 其中有 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. 突出显示了该问题。经调查发现,私钥的权限已在证书更新期间被删除。我知道上面说权限已确认存在,但用于不同的证书。我将其保留以保留历史记录/诚实。

最佳答案

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_JVM_OPTIONS="-Djavax.net.debug=ssl" 在启动 MQIPT 之前,这将导致 java 向 logs 目录中的 mqipt.stdout.log 提供 TLS 调试日志记录。

关于.net - 协商 SSL 连接时出现 IBM MQ 2538 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57872774/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com