我正在使用stompit模块连接到AMQ。如果我将ssl设置为true,则它将失败,并显示错误“无法验证第一个证书”。 如果我将rejectUnauthorized设置为false,但是代码没有从它只是连接的AMQ读取任何消息,则可以正常工作。
我尝试通过设置下面的属性来使用证书,但出现相同的错误。
ssl: true,
key:fs.readFileSync('path'),
cert:fs.readFileSync('path'),
ca: [fs.readFileSync('path')],
答案 0 :(得分:0)
如果您与 AMQ 的 TLS (SSL) 连接是通过反向代理(例如 Traefik)连接的,请确保您在选项中传递 servername
属性。这可确保反向代理根据您尝试访问的服务器名称提供正确的证书。
从 Stompi 的连接函数的 code listings 中我们可以看到使用了 NodeJS TLS 模块:
if ('ssl' in options) {
if (typeof options.ssl === 'boolean') {
if (options.ssl === true) {
transportConnect = tls.connect;
}
}
您传递给 Stompi 的连接函数的选项对象将传递给 tls.connect。 tls.connect 的 Node 文档提到使用服务器名来确保启用 SNI:
<块引用>与 https API 不同,tls.connect() 不启用 SNI(服务器 Name Indication) 扩展名,这可能会导致某些服务器 返回不正确的证书或完全拒绝连接。 要启用 SNI,除了主机之外,还需要设置 servername 选项。