2538错误上MQ为SSL信道连接(2538 error on MQ for SSL channel

2019-09-26 05:35发布

我使用IBM的WebSphere MQ 8.0版本。

我有我的配置与安装,并映射到密钥存储路径正确有效的证书一起“TLS_RSA_WITH_AES_256_CBC_SHA256”密码规范加密渠道之一。

我的.NET客户端代码不能与此安全通道连接。 它不断地给2538错误。 我已经未经加密(不安全),配置另一信道。 客户端代码可以连接到该通道没有任何错误。

这是我的.NET客户端的代码:

        Hashtable queueProperties = new Hashtable();
        queueProperties[MQC.HOST_NAME_PROPERTY] = host; // IP address
        queueProperties[MQC.PORT_PROPERTY] = 1541
        queueProperties[MQC.CHANNEL_PROPERTY] = channel; // channel name
        queueProperties[MQC.TRANSPORT_PROPERTY] = MQC.TRANSPORT_MQSERIES_MANAGED;
        queueProperties[MQC.SSL_CERT_STORE_PROPERTY] = "*USER";
        queueProperties[MQC.SSL_CIPHER_SPEC_PROPERTY] = "TLS_RSA_WITH_AES_256_CBC_SHA256";
        queueProperties[MQC.SSL_PEER_NAME_PROPERTY] = "CN=FXCMTST1,O=IBM,C=US";
        queueProperties["CertificateLabel"] = "ibmwebspheremqfxcmtst1";
        queueProperties[MQC.KEY_RESET_COUNT] = 0;
        MQEnvironment.SSLCertRevocationCheck = true;
        queueProperties[MQC.USER_ID_PROPERTY] = user; // variable
        queueProperties[MQC.PASSWORD_PROPERTY] = pwd; // variable
        try
        {
            // Attempt the connection
            queueManager = new MQQueueManager(qmgr, queueProperties);
            strReturn = "Connected Successfully";
        }

我还设置了MCA用户与所有需要的访问权限的有效用户。

当我删除这些行,并与一个不安全的替换频道名称上面的代码工作正常的非安全通道。

    queueProperties[MQC.TRANSPORT_PROPERTY] = MQC.TRANSPORT_MQSERIES_MANAGED;
    queueProperties[MQC.SSL_CERT_STORE_PROPERTY] = "*USER";
    queueProperties[MQC.SSL_CIPHER_SPEC_PROPERTY] = "TLS_RSA_WITH_AES_256_CBC_SHA256";
    queueProperties[MQC.SSL_PEER_NAME_PROPERTY] = "CN=FXCMTST1,O=IBM,C=US";
    queueProperties["CertificateLabel"] = "ibmwebspheremqfxcmtst1";
    queueProperties[MQC.KEY_RESET_COUNT] = 0;
    MQEnvironment.SSLCertRevocationCheck = true;

我缺少的代码或MQ配置什么?

更新1:我发现该错误是由于不正确的路径密钥数据库。 我曾提到在证书放置,直到文件夹名称的路径。 然而,它预计将文件夹名称,然后KDB文件,而不extention名称。

这样的变化之后,2538错误消失。 但现在我得到2059的错误,在日志下面的错误消息。

“SSL握手过程中,密码规范协商不符合要求的密码规范的渠道。”

我的频道被配置为拥有“TLS_RSA_WITH_AES_256_CBC_SHA256”正如我在MQ资源管理器中设置。 客户端代码也发送相同的密码规范。 不过它提供了2059错误。

更新2:由于@JoshMc建议,我设置的组策略,它解决了上述错误。 然后,我开始得到错误“通道缺少证书”。

更新3:之后,我改变了对SSLCAUTH可选此错误消失。 此前它被设置为REQUIRED。 由于@JoshMc您指出。

Answer 1:

本来在你的问题你有下面的代码行:

queueProperties[MQC.SSL_PEER_NAME_PROPERTY] = "ibmwebspheremqtestqueue";

我建议:在SSL_PEER_NAME_PROPERTY是为了验证部分或所有的队列管理器证书的DN值的,所以它会像一个格式CN=x.domain.com,OU=Y,O=Company Inc ,你有什么有看起来像一个证书标签。

你可以看到,如果产生了什么错误的任何队列管理器AMQERR01.LOG? 怎么样在本地客户端AMQERR01.LOG?

您回应从队列管理器的错误:

AMQ9660: SSL key repository: password stash file absent or unusable.

而且你发现你每次更新错误:

更新:我发现该错误是由于不正确的路径密钥数据库。 我曾提到在证书放置,直到文件夹名称的路径。 然而,它预计将文件夹名称,然后KDB文件,而不extention名称。

现在你转移到了以下错误:

The CipherSpec negotiated during the SSL handshake does not match the required CipherSpec for channel...

我劝道:托管.NET不使用密码指定它是从一个Windows策略回升。 这个问题的答案应该帮助“ IBM MQ.Net CertificateLabel,密码规范 ”。

你建议你固定的组策略,然后转移到收到以下错误,当您设置SSLCAUTH(REQUIRED)SVRCONN通道:

channel is lacking a certificate

SSLCAUTH(REQUIRED)告诉你要求客户有一个证书队列管理器。 客户总是需要队列管理器有一个证书,不管是什么SSLCAUTH设置为。

假定已在队列管理器被配置为执行CONNAUTH验证要发送的用户名和密码与已设置ADOPTCTX(YES)的上CONNAUTHAUTHINFO对象,然后将具有SSLCAUTH(OPTIONAL)是一个合理的设置,因为这意味着所有在客户端和队列管理器之间的数据将被加密,并且连接被ID认证/ PW。 即使你有SSLCAUTH(REQUIRED) ,除非你也配置SVRCONN以匹配特定的DN值通过来自通道的SSLPEER属性或CHLAUTH TYPE(SSLPEERMAP)规则的SSLPEER属性它不提供任何形式的认证。



文章来源: 2538 error on MQ for SSL channel connection
标签: .net ibm-mq