【发布时间】: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 启动也可以提供有用的诊断消息。 -
在您发布最后一条评论和答案之前,我正在写我的答案,希望我的回答对您有所帮助,您会考虑接受它。我现在也会对你的问题和答案进行投票,因为它们是很好的内容。