尝试从IBM MQ 9发布和订阅消息,该消息具有用于SSL连接的密码套件、用户id、密码、mykey.kdb文件。我们能够通过SSL与java进行连接。但想要对nodejs做同样的事情。在尝试这样做的同时,我们得到了SSL_INITIALISATION_ERROR
。在AMQERR01.LOG
中,我们看到以下错误块:
AMQ6090I:MQM could not display text for error 3456322
COMMENTINSERT3(SSLCIPH(' ') -> SSLCIPH(???))
有人能帮我使用NOde-js连接MQ吗?
如果TLS与Java一起工作,那么很可能服务器配置正确。
要在TLS模式下运行Node.js MQ客户端,需要设置密码规范并标识客户端密钥位置的代码。
const KEY_REPOSITORY = "../keys/clientkey";
const CIPHER = "TLS_RSA_WITH_AES_128_CBC_SHA256";
var cno = new mq.MQCNO();
// code that sets up cno object
// like Options and MQCSP credentials
var cd = new mq.MQCD();
// And then fill in relevant fields for the MQCD
// like ChannelName and ConnectionName
// If running in TLS Mode
cd.SSLCipherSpec = CIPHER;
cd.SSLClientAuth = MQC.MQSCA_OPTIONAL;
var sco = new mq.MQSCO();
sco.KeyRepository = KEY_REPOSITORY;
// And make the CNO refer to the SSL Connection Options
cno.SSLConfig = sco;
对于java,您最有可能使用的是.jks客户端密钥库。对于基于MQI的客户端(Node、Python、Go、C(,您需要一个密钥数据库和存储文件。
由于您需要安装MQI客户端,因此可以运行runmqakm工具来创建它们:
runmqakm -keydb -create -db clientkey.kdb -pw tru5tpassw0rd -type pkcs12 -expire 1000 -stash
并将服务器的公钥证书导入客户端密钥数据库
runmqakm -cert -add -label QM1.cert -db clientkey.kdb -pw tru5tpassw0rd -trust enable -file key.crt
请注意,我已经调用了密钥库和存储库clientkey
。您可以随心所欲地调用它们,但在node.js代码集中sco.KeyRepository = KEY_REPOSITORY;
指向您的clientkey