我正在编写一个Node.js应用程序,它必须从我们的一个内部API请求一些数据.棘手的部分是我请求数据的服务器有一些限制:
为了做到这一点,我运行了一些看起来像这样的代码:
var headers = {
Host: externalHostname,
Hostname: externalHostname,
};
var options = {
host: InternalIP,
path: path,
method: 'GET',
headers: headers
};
var req = https.request(options, function(res) {
res.setEncoding('utf8');
var data = "";
res.on('data', function(chunk) {
data += chunk;
});
res.on('end', function() {
//Do something with that data
});
res.on('error', function(err) {
console.log("Error during HTTP request");
console.log(err);
});
});
req.end();
Run Code Online (Sandbox Code Playgroud)
不幸的是,我得到一个400(你的浏览器发送了一个请求,这个服务器无法理解)错误作为响应.我已经检查过主机名,IP地址和路径名都是正确的(我可以在我的浏览器中测试它们,并且一切都很好).
我做了我的响应变量(res)的输出,并且我收到的authorizationError值为UNABLE_TO_VERIFY_LEAF_SIGNATURE
.我不确定那是什么,或者这是我的问题,但它是我能找到的唯一有用的信息.
我在这里输出了我的响应变量的完整输出.
关于可能导致这种情况的任何想法?
更新:我想通了!我试图通过传递?PHPSESSID=asdad
GET
变量来验证服务器,但是他们已经禁用了.我能够通过设置PHPSESSID
Cookie标头使其工作.
Tho*_*ggi 14
设置这个 process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
从最新的 node.js 中的 tls.js 源代码中查看这一点(我认为您还需要更多内容)
// 认证模式 // // TLS/SSL 支持多种级别的身份验证。 // 在“man SSL_set_verify”中了解更多相关信息。 // // 1. 服务器向客户端发送证书,但不请求证书 // 来自客户端的证书。这对于大多数 HTTPS 服务器来说很常见。浏览器 // 可以验证服务器的身份,但服务器不知道是谁 // 客户端是。通常使用 HTTP 通过 HTTP 完成客户端身份验证 // 登录框和 cookie 之类的东西。 // // 2. 服务器向客户端发送证书,并请求客户端 // 还向它发送一个证书。客户端知道服务器是谁,服务器是谁 // 请求客户端也表明自己的身份。有几个 // 结果: // // A) verifyError 返回 null 表示客户端的证书已签名 // 由服务器的 CA 之一。服务器现在知道客户端身份 // 并且客户端已被授权。 // // B) 由于某种原因,客户端的证书不可接受 - // verifyError 返回一个指示问题的字符串。服务器可以 // (i) 拒绝客户端或 (ii) 允许客户端作为连接 // 未经授权的连接。 // // 模式由两个布尔变量控制。 // // 请求证书 // 如果为 true,则服务器从客户端连接请求证书。为了 // 常见的 HTTPS 情况,用户会希望它为 false,这就是 // 默认为。 // // 拒绝未授权 // 如果证书因任何原因无效的真实客户端将不会 // 允许建立连接。如果为 false,它们将被简单地标记为 // 未经授权但安全的通信将继续。默认情况下这是 // 错误的。 //
在您的选项中将rejectUnauthorized 设置为 false 并祈祷...如果输出发生变化,请告诉我。
归档时间: |
|
查看次数: |
14023 次 |
最近记录: |