我收到以下错误:EPROTO B8150000:error:0A000152:SSL routines:final_renegotiate:unsafe legacy renegotiation disabled
执行axios post请求时。
function makeRequest(url: string, data: object) {
return axios({
url,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
method: 'POST',
data: { some: 'data' },
});
}
我想知道的是,为什么在使用Postman时,API请求能够成功地对我正在调用的端点起作用。但当我使用节点/axios时就不行了,是否还有其他方法?(例如联系API端点所有者以更新其SSL/TLS设置)
我用node version 18.17.1
我找到了一个解决方案,但不推荐:
/**
* Handle this problem with Node 18
* write EPROTO B8150000:error:0A000152:SSL routines:final_renegotiate:unsafe legacy renegotiation disabled
* see https://stackoverflow.com/questions/74324019/allow-legacy-renegotiation-for-nodejs/74600467#74600467
**/
const allowLegacyRenegotiationforNodeJsOptions = {
httpsAgent: new https.Agent({
// for self signed you could also add
// rejectUnauthorized: false,
// allow legacy server
secureOptions: crypto.constants.SSL_OP_LEGACY_SERVER_CONNECT,
}),
};
function makeRequest(url: string, data: object) {
return axios({
...allowLegacyRenegotiationforNodeJsOptions,
url,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
method: 'POST',
data: { some: 'data' },
});
}
2条答案
按热度按时间oxosxuxt1#
Postman可能是在开发模式下使用的。它可能会忽略错误。
你可以将你的API封装在cloudflare中(在互联网上搜索它),这样cloudflare的SSL就可以面向Web。
问题肯定出在服务器端。
myzjeezk2#
我看到Node版本18默认禁用了不安全的旧版TLS重新协商,请参阅此link
因此,您可以尝试将httpsAgent对象的secureOptions选项设置为crypto.constants.SSL_OP_LEGACY_SERVER_PROTECT。它将允许Node在使用传统TLS重新协商时连接到API端点。
给您: