节点的证书存储在哪里?

时间:2014-01-08 19:20:55

标签: macos node.js ssl ssl-certificate

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

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

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

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

2 个答案:

答案 0 :(得分:10)

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

我的搜索最终让我找到了最接近商店的东西,这个节点是由node.js支持的:

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

因此,虽然它确实没有对系统托管的CA进行查找,并且本身没有“存储”,但它有一个默认的CA列表。

如@Joe和@damphat所述,您可以使用Agent.options.ca属性添加自己的属性,遗憾的是,在我的情况下,解决方法不实用。

答案 1 :(得分:4)

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

从文档中:还可以指定tls.connect()中的以下选项。但是,globalAgent会默默地忽略这些。

ca: An authority certificate or array of authority certificates to check the remote host against.

要指定这些选项,请使用自定义Agent

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

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

var req = https.request(options, function(res) {

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

相关问题