Node.js Nodejs在对安全端点的GET调用上抛出EPROTO错误

Node.js Nodejs在对安全端点的GET调用上抛出EPROTO错误,node.js,ssl,Node.js,Ssl,我正在对端点进行get调用,并收到一个错误 Error: write EPROTO 140041198368576:error:140943F2:SSL routines:ssl3_read_bytes:sslv3 alert unexpected message:../ssl/record/rec_layer_s3.c:1543:SSL alert number 10\n 我使用请求-承诺。但是,我尝试使用node fetch、Axios、request-promise-native,甚

我正在对端点进行get调用,并收到一个错误

Error: write EPROTO 140041198368576:error:140943F2:SSL routines:ssl3_read_bytes:sslv3 alert 

unexpected message:../ssl/record/rec_layer_s3.c:1543:SSL alert number 10\n

我使用请求-承诺。但是,我尝试使用node fetch、Axios、request-promise-native,甚至是native-http和https模块,但仍然得到相同的错误。此外,我在节点版本10.x和12.x上尝试了它,但仍然失败。该错误是间歇性的,并不总是失败。

添加该错误以某种方式解决了问题

const agentOptions = {
  rejectUnauthorized: false
};

const agent = new https.Agent(agentOptions);

const options = {
  uri: targetURL,
  method: 'GET',
  headers: {
    "Accept": "application/json",
    "Authorization": "Basic " + token,
  },
  agent: agent,
  json: true
};

这是一个bug,无论是在OpenSSL中还是在您连接到的服务器中。最好的开始是从服务器(即日志)中找出它认为问题所在。否则,如果“间歇性”不太少见,则获取包含问题的网络捕获(tcpdump、wireshark或类似),并手动确定发送的消息是否确实错误(OpenSSL错误)或是否确实正确,以及服务器拒绝错误(服务器错误)。从那里开始。除了在Windows上,nodejs通常使用系统提供的OpenSSL,无论nodejs版本如何,OpenSSL都是相同的。服务器使用TLS1.0,1.1,1.2。在使用SSL2.0之前,它工作正常,但在TLS中它正在崩溃。SSL 2(SSL没有使用“点”号)已经完全崩溃,并且被禁止使用超过20年——这台服务器有多旧?你肯定找不到任何支持它的最新软件。(SSL 3也已损坏,但它与TLS的第一个版本非常相似,一些实现仍然支持它。)无论如何,这无助于解决您的问题。服务器虽然是新的,但以前使用的是SSL2,但现在已停止使用。另外,添加https代理以某种方式解决了const agentOptions={rejectUnauthorized:false}的问题;const agent=新的https.agent(agentOptions);