All*_*ian 4 node.js node-fetch
我有以下代码,这些代码是从快递服务器运行的:
import fetch from 'node-fetch';
let formBody = [];
const dataLogin = {
'username': 'myUser',
'password': 'myPassword'
};
for (let p in dataLogin) {
let encodedKey = encodeURIComponent(p);
let encodedValue = encodeURIComponent(dataLogin[p]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");
const url = 'https://external-login-api.com';
return fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': formBody.length
},
body: formBody
});
Run Code Online (Sandbox Code Playgroud)
运行代码时,尽管能够在Postman中运行请求而没有问题,但仍收到以下错误。
{“消息”:“对https://external-login-api.com的请求失败,原因:编写EPROTO 7316:错误:141A318A:SSL例程:tls_process_ske_dhe:dh密钥太小:openssl \ ssl \ statem \ statem_clnt.c :1472:\ n“,”类型“:”系统“,” errno“:” EPROTO“,”代码“:” EPROTO“}
如何为此请求禁用SSL验证?
小智 51
另一种方法是将您自己的代理设置为 fetch 调用。
const fetch = require('node-fetch');
const https = require('https');
const httpsAgent = new https.Agent({
rejectUnauthorized: false,
});
const response = await fetch(url, {
method: 'POST',
headers: headers,
body: body,
agent: httpsAgent,
});
Run Code Online (Sandbox Code Playgroud)
Ell*_*urn 10
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
Run Code Online (Sandbox Code Playgroud)
将确保您忽略任何拒绝的TLS证书,或者可以在运行节点服务时将其设置为环境变量。但是,这可能无济于事,并且可能是一个坏主意。SSL错误不是因为证书无效(例如,自签名证书),而是因为SSL / TLS配置中的Diffie-Hellman密钥弱。
如果您托管此服务,则应研究纠正和改进TLS / SSL密码。有关更多信息,请参见此答案。
重要的部分是:
您应该使用2048位Diffie-Hellman组或更大的组。您不应使用512位或1024位Diffie-Hellman组。
如果这是第三方服务,则应考虑与他们联系或使用其他服务,因为它们会使自己容易遭受Logjam攻击,在上面的链接中也对此进行了讨论。
| 归档时间: |
|
| 查看次数: |
6618 次 |
| 最近记录: |