nodejs https请求中的证书问题

时间:2019-01-11 09:12:09

标签: node.js https ssl-certificate

在发出https get请求时出现以下错误

{ Error: write EPROTO 101057795:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:openssl\ssl\s23_clnt.c:802:
at _errnoException (util.js:992:11)
at WriteWrap.afterWrite [as oncomplete] (net.js:864:14) code: 'EPROTO', errno: 'EPROTO', syscall: 'write' }

我正在尝试向不需要代理的公司内部资源提出请求。

const request = require('request')
var token= myToken
request({
  method: 'post',
  url: 'https://myURL',
  data: {
    myData
  },
  headers: { 'Authorization': 'Bearer myToken' },
  agentOptions: {
    rejectUnauthorized: false,
  },
}, function (error, response, body) {
if(error){
  console.log('Error: ', error)
} else {
  console.log(body)
}
})

我的.npmrc中也有strict-ssl = false。

我注意到,我可以毫无问题地进行相同的呼叫卷曲。

curl -k1 -XPOST -H "Authorization: Bearer %TOKEN%" "https://%URL% -d @data,json -H "content-type: application/json"
curl中的

-k1选项似乎可以解决证书的问题。

我在JavaScript中做错什么了?

2 个答案:

答案 0 :(得分:2)

原来是节点版本8中的错误。我终于在这里找到了解决方案-https://github.com/nodejs/node/issues/16196

一个人需要在她的代码中添加以下内容:

require("tls").DEFAULT_ECDH_CURVE = "auto"

答案 1 :(得分:1)

---
title: "Dynamic report"
output: pdf_document
params:
  n: NA
---

```{r}
# The `params` object is available in the document.
params$n
```

A plot of `params$n` random points.

```{r}
plot(rnorm(params$n), rnorm(params$n))
```

如果您不希望TLS检查整个节点项目 设置process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0;