在我们的测试环境中,我们使用我们公司签署的SSL连接到另一台服务器。每次连接都会被nodejs抛出 的 UNABLE_TO_VERIFY_LEAF_SIGNATURE 即可。 我通过设置 rejectUnauthorized:false 找到了解决方法,但在我们的情况下这不适用。
证书已添加到 / etc / ssl / certs ,并使用环境变量 SSL_CERT_DIR 进行测试,以 / etc / ssl 和 / etc / ssl / certs ,但没有结果。
此外,最好在我们的文件中添加证书并将其添加到每个请求中。
答案 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运行节点,现在节点正确找到我的证书。