node.js - 在 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?
解决方案
如果您让 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
推荐阅读
- javascript - 用于映射和过滤的 FlatMap 与 Reduce - 是否推荐使用其中一种?
- java - 在日期构造函数中出现超出范围的编译时间错误
- android - 如何在部分屏幕中使用双击?
- ios - SwiftUI:通用(macOS 和 iOS)视图的 UserInterfaceSizeClass
- node.js - Maximo REST API 不在 node.js 中返回结果
- vue-router - Vue路由器 - 捕获所有通配符不起作用
- powershell - Powershell:使用 Invoke-Expression 使用 Net Use 映射驱动器
- node.js - 如何以快递方式发送 cookie?
- python - 如何在 Vim 中的 Matlab 等两行之间进行选择?
- javascript - 如何仅在输入焦点期间切换图像源?