Request: 错误:证书链中的自签名证书

创建于 2016-02-05  ·  14评论  ·  资料来源: request/request

我正在尝试使用 Charles Proxy 分析我对服务器的请求。 服务器使用 TSL,所以我有经典的假证书可以查看清晰的流量。

NodeJS / Request 不喜欢它,所以我的脚本没有运行并抛出该错误。

我怎样才能绕过这个?

                console.log('Response status: ' + response.statusCode);
                                                          ^
TypeError: Cannot read property 'statusCode' of undefined
    at Request._callback (/xxx:88:59)
    at self.callback (/xxx:199:22)
    at Request.emit (events.js:107:17)
    at Request.onRequestError (/xxx:821:8)
    at ClientRequest.emit (events.js:107:17)
    at TLSSocket.socketErrorListener (_http_client.js:271:9)
    at TLSSocket.emit (events.js:107:17)
    at TLSSocket.<anonymous> (_tls_wrap.js:942:18)
    at TLSSocket.emit (events.js:104:17)
    at TLSSocket._finishInit (_tls_wrap.js:460:8)
Error: Error: self signed certificate in certificate chain
Help (please use Stackoverflow)

最有用的评论

感谢您的解释。 如果有人感兴趣,我发现了如何避免伪造证书的问题:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

有了它,我可以使用假 SSL 身份验证来检查我的客户端和服务器之间的通信。

所有14条评论

在这种情况下response是未定义的。
不必定义响应。
只有在实际响应到达时才会定义响应。
如果有一些连接错误不是这种情况。

检查error是否被定义,或者response.statusCode是否大于或等于 400。

如果你想调试这个使用

env NODE_DEBUG="*" node asdf.js

感谢您的解释。 如果有人感兴趣,我发现了如何避免伪造证书的问题:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

有了它,我可以使用假 SSL 身份验证来检查我的客户端和服务器之间的通信。

我的错误很相似,但现在我很好,谢谢@nmaxcom

错误:无法验证第一个证书
在错误(本机)
在 TLSSocket。(_tls_wrap.js:929:36)
在 TLSSocket.emit (events.js:104:17)
在 TLSSocket._finishInit (_tls_wrap.js:460:8)

或者你可以使用 let's encrypt,由合法 CA 签名的证书。
自签名证书现在没有意义。

request.get({ uri: 'https://mydocker.com/v2/_catalog', rejectUnauthorized: false }

对于自签名 CA,我们可以指定“rejectUnauthorized = false”。
检查第 623 行的 request.js 和 node.js 中的 _tls_wrap.js。

更好的选择是:
a) 在负载均衡器上终止 SSL
b) 使用免费证书

通过这种方式,您可以在所有环境中进行单一配置。
您将对部署更有信心,并更早地过滤错误。

拒绝options.rejectUnauthorized = false未经授权的作品
但不在options.agentOptions.rejectUnauthorized = false

不知道为什么😢

https://github.com/request/request/blob/v2.81.1/request.js#L257 -L259

对不起,只看代码。 我知道strictSSL只是rejectUnauthorized的别名
不得不说这是个坏名字,就用rejectUnauthorized 😭

运行代码时出现此错误
解析错误:语法错误,意外的 'var' (T_VAR),期待 C:xampphtdocsPHPIMAPadminindex.php 中第 146 行的文件结尾

var notifier = require('mail-notifier');
变量 imap = {
用户名:“anandlintas2017”,
密码:“xxxxxxxxx”,
主机:“imap.gmail.com”,
port: 993, // imap 端口
secure: true // 使用安全连接
};

notifier(imap).on('mail',function(mail){console.log(mail);}).start();
?>

对于建议设置rejectUnauthorized=false的人,如果我有内部服务器应该使用一些自签名证书相互加密连接,我猜将rejectUnauthorized设置为false将停止错误,但我的连接100%容易受到MITM攻击,我看到这是 nodejs tls 库中的一个错误,我在任何地方都找不到任何修复(我有谷歌到谷歌结果的第 5 页,这真的很深)我不知道其他人怎么不谈论它,我在这里错过了什么! !!!!!! 如果我错了,请纠正我!

rejectUnauthorized works in options.rejectUnauthorized = false
but not in options.agentOptions.rejectUnauthorized = false

两者都不适合我

request.get({ uri: 'https://s3.amazonaws.com/...',
    rejectUnauthorized: false,
    // strictSSL: false,
    proxy: '127.0.0.1:8080',
    agentOptions: {
        rejectUnauthorized: false,
        // strictSSL: false,
    },
}, (...args) => {
    console.log(args);
    process.exit();
});

PS 从 ELECTRON 中运行代码并打开 ssl 禁用标志。

对我来说,禁用卡巴斯基杀毒软件解决了这个问题。

https://github.com/request/request/issues/2061#issuecomment -182573171 似乎是一般问题的答案

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

没有效果。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

Fov6363 picture Fov6363  ·  24评论

dsaumyajit007 picture dsaumyajit007  ·  17评论

Areks picture Areks  ·  77评论

dcsan picture dcsan  ·  19评论

pho3nixf1re picture pho3nixf1re  ·  41评论