gpt4 book ai didi

Node.js:如何向使用自签名证书的应用程序发送 HTTPS 请求

转载 作者:太空宇宙 更新时间:2023-11-04 01:21:42 46 4
gpt4 key购买 nike

我有2 个可通过 HTTPS 访问的 Node.js 应用程序。我目前正在为这些服务使用自签名证书。对这些服务的手动访问(通过浏览器或 postman )按预期工作(带有有关自签名证书等的常见安全警告)。

但就目前而言,我无法让一个应用程序通过 HTTPS 与另一个应用程序进行通信。这是我当前的代码:

// Request parameters and options
const https = require('https');
const postData = JSON.stringify(myPostData);
const options = {
hostname: '...',
port: ...,
path: '...',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': postData.length,
},
rejectUnauthorized: false,
};
let str = '';
const req = https.request(options, (res) => {
// Assembling response data...
res.on('data', chunk => str += chunk );
res.on('end', () => {
console.log('Received:', str);
});
});
// Error handling
req.on('error', (e) => {
console.error(e);
});
// Sending payload and terminating
req.write(postData);
req.end();
<小时/>

问题

这有效,但只是因为我使用了 rejectUnauthorized: false

如何避免使用此选项? 我发现我可以提供 cert 选项(在 https.RequestOptions 中),但是我不确定如何使用它。当我创建自签名证书时,我拥有它的所有部分。

我的证书文件名为 selfsigned.crt,如下所示(并且具有 Unix EOL):

-----BEGIN CERTIFICATE-----
MFoXDTI0MTEyNTE3NTczMFowgYcxCzAJBgNVBAYTAkZSMQ0wCwYDVQQIDARQQUNB
QGNlbmVhdS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCrP3Hy
........... lots of lines ......................................
zI2hWprwsM3PGb0DLCqlotqdoxu59PQRC7aj/yb11HyfyYO9hvFmjGPkmN6T0+r6
VQQGEwJGUjENMAs/Qs7p+B9/+taee8iPWpk=
-----END CERTIFICATE-----

我尝试过以下解决方案:

  • 将证书字符串指示为 ca 和/或 cert 请求选项(请参阅其 description ) - 我知道实际上已考虑到这一点,就好像字符串格式错误,错误不同(与证书格式有关)
  • 指示“NODE_EXTRA_CA_CERTS”环境变量的证书路径,如Ashish Modi建议的那样)
  • 复制/etc/ssl/certs/中的证书文件(调用应用程序操作系统为 debian)并启动 update-ca-certificates

所有这些解决方案都不会改变结果:

code: DEPTH_ZERO_SELF_SIGNED_CERT
Error: self signed certificate
at TLSSocket.onConnectSecure (_tls_wrap.js:1055:34)

目前,我还没有有效的解决方案。

额外问题!我非常惊讶一个简单的调用看起来会如此困惑,所有回调都按时间顺序颠倒过来。有没有更简洁的方法来进行 HTTPS 调用? => request-promise 可能是一个选项,如 jfriend00 所示

最佳答案

此选项可以设置为通过额外的证书

process.env["NODE_EXTRA_CA_CERTS"] = "some/path/to/ssl.crt"

此选项可以完全禁用 ssl 错误(不推荐)

process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;

希望这有帮助。

关于Node.js:如何向使用自签名证书的应用程序发送 HTTPS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59057515/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com