C++ 客户端通过 SSL 连接到 IBM MQ

Posted

技术标签:

【中文标题】C++ 客户端通过 SSL 连接到 IBM MQ【英文标题】:C++ Client connecting to IBM MQ over SSL 【发布时间】:2011-03-04 06:04:23 【问题描述】:

我需要更改 C++ 代码以使用客户端通道定义表连接 WebSphere MQ。在带有 v6.0 的 Windows 2003 上大约有 5000 多个 MQ 客户端和 10 个 MQ 服务器。如果有人在 CCDT 中使用 C++,请帮助我。

【问题讨论】:

XML 文件包含 MQ 服务器连接信息,例如主机名、队列管理器名称、通道和端口。客户端首先尝试连接到 xml 文件中的第一个队列管理器,如果它无法建立连接,那么它会连接到第二个队列管理器。客户端连接没有负载平衡,所有服务器都在集群中。我确信客户端使用 MQCONN 进行连接,并且也会与开发人员确认相同的情况。我阅读了 v7.0 中关于自动重新连接和客户端从客户端通道定义表中随机选择队列管理器的新特性。 MQCONN 和 MQCONNX 之间的巨大区别。如果 XML 文件包含主机、通道和端口,则应用程序正在使用 MQCONNX,它允许您指定所有连接详细信息。在这种情况下,有必要将 SSL CipherSpec 添加到连接选项中,如下所述:bit.ly/aMLFnO 当然,您仍然需要告诉应用程序在哪里可以找到 KDB 文件,这就是前面所述的 SSLKEYR 环境变量。 要了解应用程序是使用 MQCONN 还是 MQCONNX,以下跟踪 MQ API 调用的命令是否有帮助? strmqtrc -x all -t api (Windows) strmqtrc -t api 嗨 Rob,我使用“strmqtrc -t api”在测试服务器中启用了跟踪,并在输出文件中找到了 MQCONN。这是否证实我们没有使用 MQCONNX?开发团队在离岸,他们无法回答我关于 MQCONN 和 MQCONNX 的问题。所以我正在检查我是否可以自己找到。 我不确定 MQCONNX 是否显示在跟踪中。但是,MQCONN 的 only 参数是 QMgr 名称,一个 48 个字符的字符串。如果您在 MQCONN 的跟踪中看到主机、端口和通道,那么它实际上是一个 MQCONNX 调用。如果您无法访问源代码,这里有一个完全不同的讨论,关于您如何从离岸团队进行 QA 代码,但我们可以将其留到另一天。 【参考方案1】:

将 MQCHLLIB 和 MQCHLTAB 环境变量设置为指向通道表,如“Using WebSphere MQ environment variables”中所述。接下来,按照手册同一部分中的说明设置 SSLKEYR。这些将允许应用程序找到 CCDT 和 KDB 文件。确保 CCDT 包含指定正确 SSLCIPH 的通道定义,然后照常连接。无需更改代码。

忠告,使用 WMQ v7 客户端,即使服务器是 v6。只要您不尝试使用自动重新连接等 v7 功能,客户端就可以向后兼容。但是,v6 将于明年停止使用,如果您想避免重新测试和重新部署 - 或运行不受支持的版本 - 尽可能多地部署在 v7 组件上。

【讨论】:

您好 Rob,感谢您的快速回复。我是 MQ 管理员,应用程序团队中的任何人都没有使用 C++ 代码的经验,因为他们使用的是 8 年前开发的相同代码。并且代码从 .xml 文件中获取 MQ 连接参数。如果无需在代码中更改任何内容,则默认情况下客户端使用 .xml 文件连接到队列管理器。如果我错了,请纠正我。 取决于 XML 文件中的内容以及应用程序的连接方式。如果应用程序使用 MQCONNX 并且当前没有填写 SSL 参数,那么它确实需要更改。另一方面,如果应用程序正在使用 CCDT,则添加 SSLKEYR 环境变量允许它找到 KDB 文件并构建一个包含 SSL 通道参数的新 CCDT 将完成转换。因此,这实际上取决于应用程序的编码方式,以了解其中哪些是正确的操作。

以上是关于C++ 客户端通过 SSL 连接到 IBM MQ的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Spring Boot 连接到具有多个 SSL 证书的多个 IBM MQ 通道

连接到 IBM Websphere MQ 时出现 NullPointerException

Amazon MQ 客户端使用哪个 TLS/SSL 版本连接到代理?

使用 C++ API 将 mq 客户端连接到具有加密通道的 mq 服务器

通过SSL将IBM DB2 JDBC连接到编目数据库

使用 JMS 连接到 IBM MQ