我正在向具有自签名证书的服务器发出https请求(使用请求模块)。如果我没有指定strictSSL: false
作为选项,则会抛出错误。
此证书已在我的操作系统(OSX)上受到信任,因此Chrome在从该服务器访问网页时不会出错。
据我所知,不同的应用程序/环境可能拥有自己的证书库。 Firefox有自己的,例如,JVM通常位于$ JAVA_HOME / jre / lib / security / cacerts(在OSX上)。
我的问题是,节点在哪里寻找其受信任的CA?有这样的概念吗?我想在那里添加我自己签署的证书用于开发目的。
答案 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