【问题标题】:IBM MQ.Net CertificateLabel, CipherSpecIBM MQ.Net CertificateLabel、CipherSpec
【发布时间】:2017-07-09 22:07:05
【问题描述】:

我正在尝试连接到远程 IBM MQ 服务器 (v.8.0) 并收到以下错误。我在 Windows 10 上使用 .Net 4.5.2。 我已经修改了客户端安装附带的 SimplePut.exe 程序。我想我可能缺少与我颁发并按照他们的说明安装的客户端证书有关的内容。可能是 CertificateLabel 设置?我对 IBM MQ 非常陌生,因此非常感谢任何帮助。

-h <host> -p 1434 -s TLS_RSA_WITH_AES_256_CBC_SHA256 -q INS -l connection -k *SYSTEM

我运行程序时队列管理器显示的错误如下:

Cause . . . . . :
There is a mismatch between the CipherSpecs on the local  and remote ends of
channel ''. The channel will not run until this mismatch is resolved.
The local CipherSpec is 'TLS_RSA_WITH_AES_256_CBC_SHA256' and the remote
CipherSpec is 'TLS_RSA_WITH_AES_128_CBC_SHA256'.
Recovery  . . . :
Change the channel definition for '' so that both ends have matching
CipherSpecs and restart the channel.

【问题讨论】:

  • 只是一个简短的说明。我也用 *USER 尝试过上述方法
  • 您是否添加了-s 选项?我没有要查看的 v8.0 SimplePut.cs,但是 7.5 版本没有这个选项。
  • 不是来自示例 - 用法:SimplePut -q queueName -k keyRepository -s cipherSpec [-h host -p port -l channel -n numberOfMsgs -dn sslPeerName -kr keyResetCount -cr sslCertRevocationCheck]根据我最近几天阅读的内容,我认为这是 v8.0 托管客户端中的一个功能。以前,由于框架的限制,您无法指定 cipherSpec。或者我相信:)
  • 您的 app.config 指定了什么?如果您安装了完整的 MQ 客户端并且未指定它将默认使用非托管。
  • 请将有关您的 SVRCONN 频道定义的详细信息也添加到您的问题中。您已经向我们展示了客户端与您的 -s 参数一起使用的内容。该错误表明 SVRCONN 正在使用不同的东西。

标签: ssl ibm-mq client-certificates


【解决方案1】:

MQ v8.0 知识中心页面“Configuring SSL for managed IBM MQ .NET”声明如下:

c。如果需要,请编辑 Windows 组策略以设置 CipherSpec,然后为使 Windows 组策略更新生效,请重新启动计算机。

一个。设置 MQEnvironment 或 SSLCipherSpec 值以将连接表示为安全连接。您指定的值用于标识正在使用的 SSL 协议(SSL 或 TLS),并且必须与您在 Windows 组策略中指定的任何首选项匹配。

MQ v8.0 知识中心页面“CipherSpec support for the managed .NET client”更详细:

对于 IBM MQ.NET 托管客户端,SSL 设置适用于 Microsoft.NET SSLStream 类。对于 SSLStream、CipherSpec 或 CipherSpecs 首选项列表,只能在 Windows 组策略中设置,这是计算机范围的设置。 SSLStream 然后在与服务器握手期间使用指定的 CipherSpec 或首选项列表。对于其他 IBM MQ 客户端,可以在 IBM MQ 通道定义的应用程序中设置 CipherSpec 属性,并且相同的设置用于 SSL 协商。 由于此限制,SSL/TLS 握手可能会协商任何受支持的 CipherSpec,而不管 IBM MQ 通道配置中指定了什么。因此,这很可能会导致错误 队列管理器上的 AMQ9631。为避免此错误,将与您在应用程序中设置的 CipherSpec 设置为 Windows 组策略中的 SSL 配置


Windows 组策略

在 Windows 组策略上设置 CipherSpec 时,必须为 SVRCONN 通道和应用程序中的 SSLCipherSpec 属性值设置相同的 CipherSpec。 如果 Windows 组策略设置为默认值,即未为 CipherSpec 设置启用/编辑组策略,应用程序必须在 Windows 组策略 SSL 配置中设置相同的 CipherSpec 默认值 MQEnvironment 类或 MQQueueManager 构造函数哈希表属性中。


关于使用 Managed .NET 指定证书标签的更新

MQ v8.0 知识中心页面“Using certificates for the managed .NET client”详细介绍了允许 MQ 查找证书的两个选项:

按证书标签匹配证书

如果您设置证书标签,IBM MQ 管理的 .NET 客户端会搜索具有给定标签名称的 Windows 证书存储库以识别客户端证书。它加载所有匹配的证书并使用列表中的第一个证书。设置证书标签有两种选择:

  • 可以在访问 MQEnvironment.CertificateLabel 的 MQEnvironment 类上设置证书标签。
  • 证书标签也可以在哈希表属性中设置,作为 MQQueueManager 构造函数的输入参数提供,如下例所示。
    Hashtable properties = new Hashtable();
    properties.Add("CertificateLabel", "mycert");
    名称("CertificateLabel") 和值区分大小写。

按字符串匹配证书

如果未设置证书标签,则搜索并使用与字符串“ibmwebspheremq”和当前登录用户(小写)匹配的证书。


更新其他有用的博文

@renz 找到了由 Sudhanshu Pant“ MQ v8: SSL connection in Managed MQ .NET”发布的 IBM developerWorks MQdev 博客,该博客也有很好的屏幕截图信息。

【讨论】:

  • 嗨,很抱歉,我应该说错误来自远程主机(服务器端)。如您所见,我告诉它使用 TLS_RSA_WITH_AES_256_CBC_SHA256。但是他们的日志显示它试图使用 TLS_RSA_WITH_AES_128_CBC_SHA256 进行连接。这就是为什么我认为我一定错过了什么。谢谢你顺便看看。
  • 谢谢,将组策略 SSL 密码套件限制为仅使用 AES_256 已解决问题或至少强制它仅使用此密码。现在这已经避开了实际问题 - AMQ9637:通道缺少证书。我有一个帖子可以解决这个问题link,所以稍后会尝试一下。如果它不起作用,将发布一个新问题:) 干杯
  • @renz 添加了有关托管 .NET 证书标签匹配的详细信息。列出的第二个选项是 MQ 过去与其他非 Java 客户端一起工作的方式,并且要求标签匹配特定格式,包括运行进程的用户名,这就是您提供的链接中讨论的内容。第一个选项允许您指定任何您想要的标签,并且符合 MQ v8 及更高版本的增强功能,所有客户端和队列管理器都允许您指定标签。
  • 感谢上述内容我一直在为这个“CertificateLabel”苦苦挣扎,本周尝试了一些事情。这个link 提到了如何给它一个“友好的名字”,这对我来说是这样的。干杯
  • 我找到了错误的原因:我使服务器证书受信任并且一切正常。回到最初的问题:property.Add("CertificateLabel", "myLabelName") 在 MQ 客户端 9.0.0.5 中也被忽略。
猜你喜欢
  • 2018-10-10
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
相关资源
最近更新 更多