我创建了自己的证书颁发机构,为我的开发环境生成TLSv1.2证书。 我的CA有一个根证书,一个由root签名的中间证书和一些" leaf"中级证书签署的证书。我使用其中一个叶子证书安全地连接到arangodb服务器。 arangod进程似乎运行正常,因为我可以在浏览器中安装root / intermediate证书后成功访问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] certs缓冲区(交换顺序) 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的一个微妙的配置问题。有人能指出我正确的配置吗?
答案 0 :(得分:0)
我终于通过使用:
设法建立了一个安全的TLS连接agentOptions: {
ca: [
fs.readFileSync('interm_root.crt.pem')
]
}
其中interm_root.crt.pem是中间证书和根证书的串联,其获取方式为:
cat interm.crt.pem root.crt.pem> interm_root.crt.pem
出于某种原因,我在第一轮测试的匆忙中没有得到连接。
希望这可以帮助其他arangojs用户