javascript - 在 arangojs 中配置 TLS 证书颁发机构

标签 javascript ssl certificate arangodb arangojs

我创建了自己的证书颁发机构来为我的开发环境生成 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] cert buffer(如上,交换顺序) 但这些似乎都不起作用。我总是从 arangojs 收到一条很长的错误消息,其中一开始我就看到 UNABLE_TO_VERIFY_LEAF_SIGNATURE

通过查找,我找到了对 node-ssl-root-cas npm 模块的引用,但由于我使用的是自己的 CA,所以我不明白为什么要使用它(我也尝试过但没有用要么)。

我的问题似乎类似于https://github.com/arangodb/arangojs/issues/39但该解决方案似乎与上述文档 1:1 同步,但仍然无效。

最后我认为这只是arangojs中agantOptions的一个细微的配置问题。有人可以指出正确的配置吗?

最佳答案

我终于设法通过使用建立了一个安全的 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 用户

关于javascript - 在 arangojs 中配置 TLS 证书颁发机构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44975673/

相关文章:

javascript - jQuery 中的 elem.setAttribute 破坏 SSL(混合事件内容错误)

iphone - 如何将客户端证书包含在 ASIHTTPRequest 中?

certificate - certutil:函数失败:SEC_ERROR_LEGACY_DATABASE:证书/ key 数据库采用旧的、不受支持的格式

wcf - Windows 上的 X.509 证书入门

ios - Xcode 不会导入 appstore.mobileprovision 文件

javascript - 使用 DIV 类/ID 上的可见性的一个文件站点设计

javascript - 我无法重新安装或更新 Electron 包

javascript - 为什么在应用类时需要 setTimeout 才能让我的过渡生效?

ssl - 通过相互 SSL 连接无法读取传入的 changeCipherSpec

ios - 在 iOS 上提升 Asio SSL 认证