Ssl IBM MQ.Net CertificateLabel,CipherSpec
我正在尝试连接到远程IBM MQ服务器(v.8.0),并收到以下错误。我正在Windows 10上使用.Net 4.5.2。 我已经修改了客户端安装附带的SimplePut.exe程序。我想我可能丢失了一些与我按照他们的指示颁发并安装的客户端证书有关的内容。可能是CertificateLabel设置?我对IBM MQ非常陌生,因此非常感谢您的帮助Ssl IBM MQ.Net CertificateLabel,CipherSpec,ssl,ibm-mq,client-certificates,Ssl,Ibm Mq,Client Certificates,我正在尝试连接到远程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 connec
-h <host> -p 1434 -s TLS_RSA_WITH_AES_256_CBC_SHA256 -q INS -l connection -k *SYSTEM
MQ v8.0知识中心页面“”说明了以下内容: c。如果需要,请编辑Windows组策略以设置密码规范,然后重新启动计算机,使Windows组策略更新生效 及 a。设置MQEnvironment或SSLCipherSpec值以将连接表示为安全连接。您指定的值用于标识正在使用的SSL协议(SSL或TLS),必须与您在Windows组策略中指定的任何首选项匹配。
MQ v8.0知识中心页面“”详细介绍了以下内容: 对于IBM MQ.NET托管客户端,SSL设置适用于Microsoft.NET SSLStream类。对于SSLStream、CipherSpec或CipherSpec首选项列表,只能在Windows组策略中设置,这是计算机范围的设置。然后,SSLStream在与服务器握手期间使用指定的CipherSpec或首选项列表。对于其他IBM MQ客户机,可以在IBM MQ通道定义的应用程序中设置CipherSpec属性,并将相同的设置用于SSL协商由于此限制,SSL/TLS握手可能会协商任何受支持的CipherSpec,而不管IBM MQ通道配置中指定了什么。因此,这可能会导致队列管理器上出现错误AMQ9631。为避免此错误,将与应用程序中设置的密码规范相同的密码规范设置为Windows组策略中的SSL配置
Windows组策略 在Windows组策略上设置CipherSpec时,必须在SVRCONN通道和应用程序中为SSLCipherSpec属性值设置相同的CipherSpec如果Windows组策略设置为默认值,即未为CipherSpec设置启用/编辑组策略,则应用程序必须在MQEnvironment类或MQQueueManager构造函数哈希表属性中从Windows组策略SSL配置设置相同的CipherSpec默认值
使用托管.NET指定证书标签的更新
MQ v8.0知识中心页面“”详细介绍了允许MQ查找证书的两个选项: 按证书标签匹配证书 如果设置证书标签,IBM MQ managed.NET客户端将使用给定的标签名称搜索Windows证书存储,以标识客户端证书。它加载所有匹配的证书并使用列表中的第一个证书。设置证书标签有两个选项:
- 可以在访问MQEnvironment.CertificateLabel的MQEnvironment类上设置证书标签
- 证书标签也可以在哈希表属性中设置,作为MQQueueManager构造函数的输入参数提供,如下例所示。
Hashtable properties=newhashtable()代码>
添加(“CertificateLabel”、“mycert”)代码>
名称(“CertificateLabel”)和值区分大小写
按字符串匹配证书 如果未设置证书标签,则搜索并使用与字符串“ibmwebspheremq”和当前登录用户(小写)匹配的证书
使用其他有用的博客帖子更新
@renz找到了Sudhanshu Pant“”发布的IBM developerWorks MQdev博客,该博客还提供了关于屏幕截图的良好信息。只是一个简短的说明。我也用*users试过上面的方法。你添加了
-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 keyrestecount-cr sslCertRevocationCheck],这是我最近几天阅读的内容,我认为这是v8.0托管客户端中的一个特性。以前,由于框架中的限制,您无法指定cipherSpec。或者我相信:)你的app.config指定了什么?如果已安装完整的MQ客户端,但未指定,则默认情况下将使用非托管。请在问题中添加有关SVRCONN通道定义的详细信息。您已经向我们展示了客户端在使用-s参数时使用了什么。该错误表明SVRCONN正在使用不同的东西。您好,抱歉,我应该说错误来自远程主机(服务器端)。如你所见,我告诉它使用TLS_RSA_和_AES_256_CBC_SHA256。但他们的日志显示,他们试图使用TLS_RSA_与_AES_128_CBC_SHA256进行连接。这就是为什么我认为我一定错过了什么。谢谢您顺便看一下。谢谢,将组策略SSL密码套件限制为仅使用AES_256已修复此问题,或者至少强制其仅使用此密码。这一点现在已经回避到了实际问题,即-AMQ9637:通道缺少证书。我有一个帖子要关注,它解决了这个问题,所以稍后将尝试一下。如果不起作用,将发布新问题:)Cheers@renz添加了有关托管.NET证书标签匹配的详细信息。列出的第二个选项是MQ过去与其他非Java客户机的工作方式,它要求标签匹配我所使用的特定格式
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.