NodeJS无法读取ubuntu中的默认CA.

时间:2013-12-18 12:23:11

标签: node.js ssl certificate ca

在我们的测试环境中,我们使用我们公司签署的SSL连接到另一台服务器。每次连接都会被nodejs抛出 的 UNABLE_TO_VERIFY_LEAF_SIGNATURE 即可。 我通过设置 rejectUnauthorized:false 找到了解决方法,但在我们的情况下这不适用。

证书已添加到 / etc / ssl / certs ,并使用环境变量 SSL_CERT_DIR 进行测试,以 / etc / ssl / etc / ssl / certs ,但没有结果。

此外,最好在我们的文件中添加证书并将其添加到每个请求中。

3 个答案:

答案 0 :(得分:4)

这是因为节点不使用系统的CA配置;它包括its own built-in list of acceptable CAs

如果您希望节点SSL客户端接受自定义CA,则必须在ca option中传递CA的证书。

// do something like this when your app starts up:
fs.readFile('/path/to/ca.pem', function(err, cert) {
    if (err) ...
    else certBuffer = cert;
});

// then when you make requests...
https.request({
    hostname: 'example.com',
    port: 443,
    path: '/',
    method: 'GET',
    ca: certBuffer
}, ...);

答案 1 :(得分:1)

如果你不想依赖node.js内置列表,而是使用你的debian / ubuntu列表:

var CAs = fs.readFileSync('/etc/ssl/certs/ca-certificates.crt').toString().split(/(?=-----BEGIN CERTIFICATE-----)/);

// then when you make requests...
https.request({ ..., ca: CAs}, ...);

答案 2 :(得分:0)

您还可以使用从节点v7.3.0开始的NODE_EXTRA_CA_CERTS环境变量以PEM文件格式添加证书路径

https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file

这样做的好处是不需要更改任何代码,只需更改import numpy as np df['C'] = np.where(df.B >= 1, 1, # if B >= 1 then C is 1 np.where(df.B <= -1, -1, # if B <= -1 then C is -1 np.where(np.sign(df.B).diff() != 0, 0, np.nan))) # else if B changes sign # (cross zero) then C is 0 otherwise C is nan df.ffill() # fill nan with previous values # A B C #1 D 0.25 0.0 #2 D 0.50 0.0 #3 D 0.75 0.0 #4 D 1.00 1.0 #5 D 1.25 1.0 #6 D 1.75 1.0 #7 D 0.50 1.0 #8 D -0.25 0.0 #9 D 1.25 1.0 #10 D 0.75 1.0 #11 D -0.75 0.0 #12 D -1.00 -1.0 #13 D -1.50 -1.0 #14 D -2.00 -1.0 #14 D -0.75 -1.0 #14 D 0.00 0.0 进程的环境即可。希望这有帮助!

编辑:

另请查看--use-openssl-ca https://nodejs.org/api/cli.html#cli_use_openssl_ca_use_bundled_ca

这就是我最终用来解决我的问题。我将.crt文件复制到/ usr / local / share / ca-certificates然后运行node然后使用--use-openssl-ca运行节点,现在节点正确找到我的证书。