我正在使用安装在应用程序服务器上的 IBM MQ WebSphere 客户端 v 7.5。

为了安全地连接到 MQ 队列管理器,我必须通过名称应该是 ibmwebspheremq + "userid" 的证书。我将我的代码放在 APP SERVER 上以测试 MQ 连接。如果我指定域用户 ID,它对我来说工作正常,但对其他域用户无效。那么应该使用什么证书名称,以便它适用于所有域用户??

证书标签:位于本地路径上的 ibmwebspeheremq.kdb

证书名称:使用 strmqikm.exe,打开上面的证书并检查名称
截至目前,此 CN 是“ibmwebspheremq”+ 111111(域用户 ID),它适用于域用户 111111 ,但对于域用户 222222 则抛出 SSL 错误。

附言必须维护安全

来自 2015 年 9 月 11 日 OP 评论的更新
我正在使用 .NET 应用程序并通过 dll amqmdnet 提供的 IBM.WMQ 接口(interface)的帮助完成代码。我有 KDB 证书,我刚刚在配置中提供了本地证书的路径。我可以在 APP 服务器(MQ 客户端所在的位置)上为特定用户访问 MQ 服务器,但是如果我想为所有用户访问,那么如何访问?因为在我的情况下,证书标签名称(使用 strmqikm.exe)应该类似于 ibmwebspheremq + userid。对于个人用户,我可以通过单独登录到应用服务器来访问证书,但不能同时为所有用户访问。只有一个证书,如前所述,它是非 JAVA 应用程序。

最佳答案

MQ 客户端要么使用 IBM 的 C 代码,要么使用 Java 和 JRE 的 JSSE 提供程序。其中每一个都有不同的行为和要求。

Java EE App Server 将使用 JSSE 提供程序及其规则从 JKS 中选择个人证书。这可能包括也可能不包括搜索特定标签。任何使用 IBM 编译的 C 代码 API 的东西都需要在 KDB 中为个人证书提供一个特定的标签。此外,如 IBM 的 Technote Specifying the userid in the SSL certificate label for an MQ client 中所述,行为已随版本发生变化。

如技术说明中所述,Java 客户端使用标准 Java 方法来查找个人证书,并且完全不依赖于标签。该要求仅适用于非 Java 客户端。 App 服务器使用 JKS,非 Java 客户端使用 KDB。由于您没有提到在 JKS 和 KDB 之间转换证书,我假设您的测试人员没有使用 C 客户端或 KDB。

据推测,您的测试人员正在使用与应用程序服务器相同的 JKS。如果他们有正确的路径和密码来访问它,并且如果它有个人证书,他们将能够找到并出示个人证书。如果它拥有多个个人证书,MQ 无法控制它如何选择将呈现的证书。那是Java的事情。如果这是问题,答案很简单——要么使用一个个人证书和一个 keystore ,要么每个测试人员都有自己的 JKS,每个人都有自己的个人证书。



在这种情况下,后一种方法是首选。每个测试人员都应该有自己的 JKS 和自己的个人证书。

另一种可能性是您有各种证书,每个证书都被客户端找到并正确呈现给服务器,但是存在证书交换问题。如果每个开发人员都有自己的证书并且都是自签名的,则公共(public)部分必须在 QMgr 的 KDB 中才能被接受。

如果您想要更准确的答案,您需要提供更多详细信息,例如测试人员用于测试的代码、 keystore 和证书,这些是否是自签名证书,测试人员是否使用相同的应用程序 channel 并从同一节点进行测试,无论您是否使用 SSLCAUTH 等。我还建议使用我在 this answer 中概述的调试过程。

关于c# - 应用程序服务器上安装的 IBM MQ .Net 客户端使用什么证书名称?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32493382/

10-17 00:06