我正在尝试通过SSL连接到本地队列,但遇到了一个错误:pymqi.MQMIError: MQI Error. Comp: 2, Reason 2393: FAILED: MQRC_SSL_INITIALIZATION_ERROR
。在AMQERR01.LOG
日志文件中,显示了这样的信息:AMQ9660E: SSL密钥库:密码缓存文件缺失或无法使用。
尽管相关的.sth
文件确实在指定的目录中。
我需要帮助来解决这个错误。以下是我在代码中使用的设置:
- 队列管理器名称:
QM1
- 通道名:
DEV.APP.SVRCONN
- 主机地址:
127.0.0.1
- 端口:
1414
- 队列名:
DEV.QUEUE.1
- 连接信息字符串:根据主机和端口动态构建
- SSL密码规范:
TLS_RSA_WITH_AES_256_CBC_SHA256
- 密钥库位置:
/var/mqm/qmgrs/QM1/ssl/key_1
- 用户名:
app
- 密码:
qwerty
- 消息内容:
Hello from Python!
我在代码中设置了环境变量MQSSLKEYR
指向密钥库的位置,并使用pymqi
库尝试建立连接。具体代码如下所示:
# 导入必要的库并定义连接参数
# ...(略去导入语句,假设已经正确导入)
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})'.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!'
# 设置环境变量指向SSL密钥库
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
# 尝试连接队列管理器并发送消息
try:
qmgr = pymqi.QueueManager(None)
qmgr.connect_with_options(queue_manager, cd, sco)
put_queue = pymqi.Queue(qmgr, queue_name)
put_queue.put(message)
finally:
# 确保队列管理器和队列被适当关闭
if put_queue:
put_queue.close()
if qmgr:
qmgr.disconnect()
尽管我已经按照文档和示例配置了所有必要项,但仍然遇到SSL初始化错误。我期望能获得解决此问题的具体步骤或可能的原因分析。