You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助解决IBM MQ SSL初始化错误(MQRC_SSL_INITIALIZATION_ERROR)

问题描述

使用pymqi连接本地IBM MQ队列时触发SSL初始化错误:

pymqi.MQMIError: MQI Error. Comp: 2, Reason 2393: FAILED: MQRC_SSL_INITIALIZATION_ERROR

查看AMQERR01.LOG日志显示:

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

已确认对应的.sth文件存在于指定目录,相关代码如下:

queue_manager = 'QM1'
channel = b'DEV.APP.SVRCONN'
host = '127.0.0.1'
port = '1414'
queue_name = 'DEV.QUEUE.1'
conn_info = f'{host}({port})'
conn_info = conn_info.encode('utf-8')
ssl_cipher_spec = 'TLS_RSA_WITH_AES_256_CBC_SHA256'.encode('utf-8')
key_repo_location = b'/var/mqm/qmgrs/QM1/ssl/key_1'
key_repo_location_env = '/var/mqm/qmgrs/QM1/ssl/key_1'
certificate_label = b'cert_1'
user = 'app'
password = 'qwerty'
message = 'Hello from Python!'
os.environ['MQSSLKEYR'] = key_repo_location_env
cd = pymqi.CD()
cd.ChannelName = channel
cd.ConnectionName = conn_info
cd.ChannelType = pymqi.CMQC.MQCHT_CLNTCONN
cd.TransportType = pymqi.CMQC.MQXPT_TCP
cd.SSLCipherSpec = ssl_cipher_spec
cd.CertificateLabel = certificate_label
sco = pymqi.SCO()
sco.KeyRepository = key_repo_location
sco.CertificateLabel = certificate_label
qmgr = pymqi.QueueManager(None)
qmgr.connect_with_options(queue_manager, cd, sco)
put_queue = pymqi.Queue(qmgr, queue_name)
put_queue.put(message)

排查与解决步骤

  • 检查密钥库文件完整性:IBM MQ要求密钥库必须同时存在.kdb(密钥数据库)和.sth(密码 stash 文件),且两者文件名完全一致(Linux系统区分大小写)。确认/var/mqm/qmgrs/QM1/ssl/目录下同时存在key_1.kdb和key_1.sth。
  • 验证文件权限:运行Python程序的用户需对密钥库目录及文件拥有读权限。执行以下命令检查并调整权限:
    ls -l /var/mqm/qmgrs/QM1/ssl/key_1.*
    chmod 644 /var/mqm/qmgrs/QM1/ssl/key_1.kdb /var/mqm/qmgrs/QM1/ssl/key_1.sth
    chmod 755 /var/mqm/qmgrs/QM1/ssl/
    
    若程序运行用户不属于mqm组,需将其加入该组或调整文件所属组权限。
  • 统一密钥库路径配置:代码中同时设置了MQSSLKEYR环境变量和sco.KeyRepository,两者路径需完全一致(均不包含文件后缀)。可暂时注释os.environ['MQSSLKEYR'],仅保留sco.KeyRepository配置,避免冲突。
  • 重新生成stash文件:若.sth文件存在但不可用,以mqm用户身份重新生成:
    su - mqm
    runmqckm -keydb -stashpw -db /var/mqm/qmgrs/QM1/ssl/key_1.kdb -pw <密钥库密码>
    
  • 核对通道SSL配置:确认队列管理器的DEV.APP.SVRCONN通道SSLCIPH属性与代码中的TLS_RSA_WITH_AES_256_CBC_SHA256完全匹配,同时根据认证需求设置SSLCAUTH属性(单向认证设为OPTIONAL,双向认证设为REQUIRED)。
  • 验证证书标签:确认代码中CertificateLabel的值与密钥库中证书的标签完全一致(区分大小写)。

内容的提问来源于stack exchange,提问作者K Ashish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:09:58