我创建了自己的证书颁发机构来为我的开发环境生成 TLSv1.2 证书。我的 CA 有一个根证书、一个由根签名的中间证书和一些由中间证书签名的“叶”证书。我使用其中一个叶子证书来安全地连接到 arangodb 服务器。arangod 进程似乎运行良好,因为在浏览器中安装根/中间证书后,我可以成功访问 Web 界面以与数据库交互。
当我尝试使用 arangojs javascript 驱动程序将我的 nodejs API 服务器连接到数据库时,问题就开始了,正如我在https://github.com/arangodb/arangojs#new-database中所解释的那样:
如果您需要支持自签名 HTTPS 证书,您可能需要将您的证书添加到 agentOptions,例如:
agentOptions: {
ca: [
fs.readFileSync('.ssl/sub.class1.server.ca.pem'),
fs.readFileSync('.ssl/ca.pem')
]
}
agentOption 配置在使用自签名证书时有效,并且:
agentOptions: {
ca: [
fs.readFileSync('db.crt.pem')
]
}
但在使用我自己的 CA 签名证书时失败,并且:
agentOptions: {
ca: [
fs.readFileSync('interm.crt.pem')
]
}
我还尝试了其他几个 ca 设置,例如: 1. 传递 [root, interm] 证书缓冲区 2. 传递 [interm, root] 证书缓冲区(交换顺序) 3. 传递 [root+interm] 证书缓冲区(单个连接文件) 4.传递 [interm+root] 证书缓冲区(如上,交换顺序),但这似乎都不起作用。我总是从 arangojs 收到一条很长的错误消息,其中一开始我看到 UNABLE_TO_VERIFY_LEAF_SIGNATURE
通过查找它,我发现了对 node-ssl-root-cas npm 模块的引用,但是由于我使用的是我自己的 CA,所以我不明白为什么要使用它(我也尝试过但也没有工作)。
我的问题似乎与https://github.com/arangodb/arangojs/issues/39类似,但解决方案似乎与上面的文档 1:1 同步,但仍然无法正常工作。
最后我认为这只是 arangojs 中的 agantOptions 的一个微妙的配置问题。有人可以指出我正确的配置吗?