节点的证书存储在哪里?

bad*_*unk 9 macos ssl ssl-certificate node.js

我正在向具有自签名证书的服务器发出https请求(使用请求模块).如果我没有指定strictSSL: false选项,则会抛出错误.

此证书已在我的操作系统(OSX)上受到信任,因此Chrome在从该服务器访问网页时不会出错.

我了解不同的应用程序/环境可能有自己的证书库.Firefox有自己的,例如,JVM通常位于$ JAVA_HOME/jre/lib/security/cacerts(在OSX上).

我的问题是,节点在哪里寻找其可信任的CA?有这样的概念吗?我想在那里添加我自签名的证书以用于开发目的.

bad*_*unk 10

似乎虽然没有商店,但是内置了一个CA的默认列表.

我的搜索最终导致我最接近商店,这个节点.js支持的CA文件:

https://github.com/joyent/node/blob/master/src/node_root_certs.h

因此,虽然它确实没有对系统托管的CA进行查找,并且本身没有"存储",但它接受的是CA的默认列表.

正如@Joe和@damphat所提到的,你可以使用Agent.options.ca属性添加自己的属性,不幸的是,在我的情况下,解决方法不实用.

  • 从7.3开始,有https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file,它更接近于通过系统添加任意一个 (2认同)

Joe*_*Joe 7

没有商店。您可以ca向 https 请求传递一个选项,以告诉它您信任哪些 CA。

文档

tls.connect()还可以指定以下选项 from 。然而,aglobalAgent默默地忽略了这些。

  • ca:用于检查远程主机的权威证书或权威证书数组。

为了指定这些选项,请使用自定义Agent.

var options = {
  ...
  ca: CA or [array of CAs]
  ...
};

options.agent = new https.Agent(options);

var req = https.request(options, function(res) {
Run Code Online (Sandbox Code Playgroud)

参考:http : //nodejs.org/api/https.html#https_https_request_options_callback