首页 > 解决方案 > 在 Node js 中的 IBM MQ 中实现 SSL

问题描述

尝试从 IBM MQ 9 发布和订阅消息,该消息具有用于 SSL 连接的密码套件、用户标识、密码、mykey.kdb 文件。我们能够通过 SSL 与 java 连接。但想对节点 js 做同样的事情。在尝试这样做的同时,我们得到SSL_INITIALISATION_ERROR. 在AMQERR01.LOG我们看到下面的错误块:

AMQ6090I:MQM could not display text for error 3456322
COMMENTINSERT3(SSLCIPH(' ') -> SSLCIPH(???))

谁能帮助我使用 NOde js 连接到 MQ?

标签: node.jssslibm-mqjks

解决方案


如果您让 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

请注意,我已经调用了 keystore 和 stash clientkey。您可以随意调用它们,但在您的 node.js 代码集中
sco.KeyRepository = KEY_REPOSITORY;

指向你的等价物clientkey


推荐阅读