我正在尝试使用 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
在这种情况下response
是未定义的。
不必定义响应。
只有在实际响应到达时才会定义响应。
如果有一些连接错误不是这种情况。
检查error
是否被定义,或者response.statusCode
是否大于或等于 400。
如果你想调试这个使用
env NODE_DEBUG="*" node asdf.js
感谢您的解释。 如果有人感兴趣,我发现了如何避免伪造证书的问题:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
有了它,我可以使用假 SSL 身份验证来检查我的客户端和服务器之间的通信。
我的错误很相似,但现在我很好,谢谢@nmaxcom
错误:无法验证第一个证书
在错误(本机)
在 TLSSocket。
在 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";
没有效果。
最有用的评论
感谢您的解释。 如果有人感兴趣,我发现了如何避免伪造证书的问题:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
有了它,我可以使用假 SSL 身份验证来检查我的客户端和服务器之间的通信。