Linux Docker下.Net Core连接IBM MQ报2059密码套件不匹配问题
解决方案
1. 密码套件适配问题解决
openssl ciphers输出里的AES256-SHA256就是IANA标准名称*TLS_RSA_WITH_AES_256_CBC_SHA256*对应的OpenSSL别名,无需额外安装套件,只要调整系统和.NET运行时的加密策略即可,Dockerfile配置步骤如下:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base # 安装加密策略调整依赖 RUN apt-get update && apt-get install -y libssl1.1 ca-certificates && \ # 修改OpenSSL配置降低安全级别,允许CBC类密码套件 sed -i 's/MinProtocol = TLSv1.2/MinProtocol = TLSv1.2\nCipherString = DEFAULT@SECLEVEL=1/g' /etc/ssl/openssl.cnf && \ # 配置.NET运行时允许遗留TLS加密算法 echo "DOTNET_SYSTEM_NET_SECURITY_ENABLELEGACYTLSCRYPTOGRAPHY=true" >> /etc/environment && \ apt-get clean && rm -rf /var/lib/apt/lists/* WORKDIR /app EXPOSE 80 EXPOSE 443 # 后续构建步骤保持原有逻辑不变
2. IBM MQ客户端版本适配问题解决
版本降级后原有正常连接也报错是IBM XMS .NET客户端的已知兼容性问题,按以下规则调整即可:
- .NET Core 3.1环境下优先使用
IBM.XMS.NETStandard9.2.3及以上版本,该版本修复了Linux环境下CBC类密码套件的名称映射Bug - 不要使用9.1.0~9.1.5区间的版本,该区间版本对Linux环境下的TLS 1.2密码套件映射存在逻辑错误
- 连接属性中额外添加
MQC.SSL_CIPHER_SUITE_PROPERTY属性,值和MQC.SSL_CIPHER_SPEC_PROPERTY保持一致,避免客户端自动映射名称出错:
private static string _host = "GH2134"; private static int _port = 1414; private static string _channel= "AES256.TEST.CHANNEL"; private static string _qmgr= "MQMGR"; private static string _cipherSpec = "TLS_RSA_WITH_AES_256_CBC_SHA256"; private static string _mqUser = "mymqUser"; private static string _mqPassword = "mymqPassword@"; private static string _keyRepository = "*USER"; var properties = new Hashtable(); properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED); properties.Add(MQC.HOST_NAME_PROPERTY, _host); properties.Add(MQC.PORT_PROPERTY, _port); properties.Add(MQC.CHANNEL_PROPERTY, _channel); properties.Add(MQC.USER_ID_PROPERTY, _mqUser); properties.Add(MQC.PASSWORD_PROPERTY, _mqPassword); properties.Add(MQC.SSL_CIPHER_SPEC_PROPERTY,_cipherSpec); // 新增密码套件显式配置 properties.Add(MQC.SSL_CIPHER_SUITE_PROPERTY, _cipherSpec); properties.Add(MQC.SSL_CERT_STORE_PROPERTY, _keyRepository); var queueManager = new MQQueueManager(_qmgr, properties); Console.Write("Connection created successfully...\n\n");
3. 配置验证步骤
容器启动后执行以下命令验证配置生效:
openssl ciphers -v | grep AES256-SHA256
正常输出应为:AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA256
内容的提问来源于stack exchange,提问作者Nirjal Khadka
相关产品推荐
相关产品推荐

