2017-10-19 171 views
2

我试图连接我的RabbitMQ服务器,它被迫使用SSL,并且使用用户和密码进行保护。以前,我成功地从C#,PHP和Python应用程序连接到此服务器。如何连接节点的amqplib与ssl连接?

这是我的Node.js代码:

const amqp = require('amqplib'); 
const fs = require('fs'); 

const config = {...} 

const opts = { 
    ca: [fs.readFileSync(config.certificatePath)] 
}; 

const url = `amqps://${config.username}:${config.password}@${config.hostname}:${config.port}`; 

const open = amqp.connect(url, opts); 

open.then(function(conn) { 
    console.log('connected.'); 
}).then(null, console.warn); 

我得到的错误是:无法获取本地颁发者证书

1)是什么错误呢?

2)我需要做什么才能连接?

注意:在library's ssl guide它被写为“(必须)提供一个选项对象,将传递到tls.connect()”。 我不明白这个指令,也没有使用tls.connect()的例子。我尝试了一些变化,但失败了,也许它会给这里的某个人提供线索。

+0

在你的情况'config.certificatePath'这是正在使用服务器的证书文件? –

+0

其实我试过这两种方法。一个尝试使用相同的证书,另一个尝试使用不同的证书。 –

回答

0

您的证书路径分配为ca,您错过了certkey

var opts = { 
    cert: certificateAsBuffer,  // client cert 
    key: privateKeyAsBuffer,  // client key 
    passphrase: 'MySecretPassword', // passphrase for key 
    ca: [caCertAsBuffer]   // array of trusted CA certs 
}; 

你可以找到一个参考here