AMQ9631E:SSL 握手期间协商的 CipherSpec 与通道所需的 CipherSpec 不匹配

问题描述 投票:0回答:2

尝试连接到 IBM MQ 队列。

下面是负责创建连接的代码:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
IConnection connectionMQ;

factoryFactory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
IConnectionFactory cf = factoryFactory.CreateConnectionFactory();

cf.SetStringProperty(XMSC.WMQ_HOST_NAME, "host");
cf.SetIntProperty(XMSC.WMQ_PORT, port);
cf.SetStringProperty(XMSC.WMQ_CHANNEL, "channel");
cf.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT);
cf.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, "queueManager"); 
cf.SetStringProperty(XMSC.WMQ_SSL_PEER_NAME, "sslPeerName"); 
cf.SetStringProperty(XMSC.WMQ_SSL_CIPHER_SPEC, "TLS_RSA_WITH_AES_256_CBC_SHA256"); 
cf.SetStringProperty(XMSC.WMQ_CCSID, "ccSid");
cf.SetStringProperty(XMSC.WMQ_SSL_KEY_REPOSITORY, "*USER");
cf.SetStringProperty(XMSC.WMQ_SSL_CLIENT_CERT_LABEL, "clientCertLabel");

connectionMQ = cf.CreateConnection();

服务器端可见错误:

AMQ9631E:SSL 握手期间协商的 CipherSpec 不 匹配通道“channel”所需的 CipherSpec。

说明:本地的 CipherSpec 之间不匹配 和通道“通道”的远程端。该通道将不会运行,直到 这种不匹配现象已得到解决。本地需要的 CipherSpec 通道定义为“TLS_RSA_WITH_AES_256_CBC_SHA256”。的名字 SSL 握手期间协商的 CipherSpec 是 'TLS_RSA_WITH_AES_256_GCM_SHA384'。如果名称为 无法确定协商的 CipherSpec。行动:改变 “通道”的通道定义,因此两端具有匹配 CipherSpecs 并重新启动通道。使用“ANY”类型时 CipherSpecs 确保客户端 CipherSpec 值满足 “TLS_RSA_WITH_AES_256_CBC_SHA256”CipherSpec 集的要求 在频道“频道”上。如果客户端设置为使用“ANY”类型 CipherSpecs 那么 TLS 握手可能使用比现在更高的协议 通道定义 CipherSpec 允许。如果 通道一端使用的证书是全局服务器 证书,那么协商的 CipherSpec 可能不匹配 在通道的任一端指定。这是因为 SSL 协议允许全局服务器证书自动协商 更高级别的加密。在这些情况下指定 CipherSpec 满足全球服务器证书的要求。

为什么,尽管我通过.net传递了TLS_RSA_WITH_AES_256_CBC_SHA256,但你可以在服务器端日志中看到TLS_RSA_WITH_AES_256_GCM_SHA384?

客户端使用的是redhat。

c# .net ssl openshift ibm-mq
2个回答
1
投票

对于 IBM MQ/XMS .NET 客户端,应用程序级别的密码集仅用于确定 TLS 版本。 在 Windows 上运行的客户端: IBM MQ/XMS .NET 客户端依赖 Microsoft 的 SSLStreams 进行 SSL 通信。要设置首选密码,必须启用并编辑 Windows 组策略以使用特定密码。启用并编辑后,必须重新启动计算机才能使更改生效。请注意,Windows 组策略中的更改适用于计算机上运行的所有应用程序。

以下KC页面有更多信息 https://www.ibm.com/docs/en/ibm-mq/9.1?topic=client-cipherspec-support-management-net

对于在 Linux 上运行的客户端 在 Linux .NET 上使用 openssl 进行 SSL 通信,因此要设置 CipherSpec 首选项,必须编辑 Openssl 配置文件


0
投票

我遇到了同样的问题,并遵循了几篇 IBM MQ 支持文章来解决该问题。我们的 C#.Net 应用程序使用 IBM MQ .Net 客户端版本 8,队列管理器低于 v9.2。有一天,服务器管理员升级到 9.2,我们的应用程序开始收到 AMQ9631E:SSL 握手期间协商的 CipherSpec 与通道“通道名称”所需的 CipherSpec 不匹配。我们的应用程序通过 TLS1.2 连接到通道,密码规范为 TLS_RSA_WITH_AES_128_CBC_SHA256。我们按照下面两篇文章来解决我们的问题。请注意,我们的应用程序托管在 Windows Server 2016 上,默认 TLS 版本是 TLS 1.2 。另请注意,在 Linux 服务器上运行的其他 Java 应用程序无需任何更改即可连接。

1.https://www.ibm.com/support/pages/tls-cipher-specification-order-changed-mq-92 2.https://www.ibm.com/docs/en/ibm-mq/ 9.2?主题=cipherspecs-cipherspec-order-in-tls-handshake

我们遵循的具体步骤:

服务器管理员使用密码规范 TLS_RSA_WITH_AES_256_GCM_SHA384 创建了一个新通道

升级了客户端应用程序以使用 IBMMQDotnetClient v9.3。并使用 .Net Framework 4.8 标准。

© www.soinside.com 2019 - 2024. All rights reserved.