如何使用node.js请求模块使用我自己的证书进行SSL调用?

Jak*_*ake 19 ssl https certificate request node.js

我正在使用node.js和此请求模块对另一台服务器进行HTTP调用.

https://github.com/mikeal/request

它很棒.我现在需要使用我公司的SSL证书修改此代码以通过SSL进行调用.在请求模块的文档中,它说明了strictSSL选项:

"strictSSL - 设置为true以要求SSL证书有效.注意:要使用您自己的证书颁发机构,您需要指定使用该ca作为选项创建的代理."

这听起来像我需要做的,但我不明白这句话:"指定一个用该ca作为选项创建的代理."

1)"代理人"是什么意思?2)如何"指定代理"3)如何创建代理"以该ca作为选项"?

代码示例会很棒,但任何潜在客户都会有所帮助.谢谢.

Nie*_*ard 11

这很大程度上阐述了彼得里昂斯的回答,提供了一个例子.

我假设您要求使用由您自己的证书颁发机构(ca)签名的证书通过HTTPS运行的域.

当您使用请求库时,不需要自己实际实例化代理,您可以简单地为agentOptions您正在进行的请求提供一些代理.以下是一个例子:

request({
  method: "POST",
  uri: "https://localhost/entries",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    name: "someEntry"
  }),
  agentOptions: {
    ca: fs.readFileSync("certs/ca.cert.pem")
  }
}, function(error, httpResponse, body) {
  //handle response
});
Run Code Online (Sandbox Code Playgroud)

这里重要的是agentOptions,你提供了ca的证书.现在接受使用由ca签名的证书的所有域.想象一下ca CA1签署了三个域,D1,D2,D3.将ca设置为CA1会导致允许对所有域D1,D2,D3(但不是由不同的ca签名的D4)发出请求.

要点:"certs/ca.cert.pem"必须是签名证书颁发机构的证书.

  • 如果我想接受由中间人签署的证书怎么办?我已尝试过所有组合(CA,IA; CA;甚至IA,CA),但我的证书从未经过验证(`UNABLE_TO_VERIFY_LEAF_SIGNATURE`或`UNABLE_TO_GET_ISSUER_CERT`) (4认同)

Pet*_*ons 5

  1. “一个代理”是指来自节点标准模块的http.Agent 的一个实例http
  2. 文档表明这个代理实例将requestpool我相信的选项中传递给,虽然我自己没有做过,而且文档在这里的细节确实很少。基于浏览代码,我认为您可能只需要options.ca
  3. 要求似乎直接支持options.ca ,并在这里使用它getAgent

所以我的猜测可能只是options.ca作为一个字符串传入,该字符串是您公司证书颁发机构的公钥,然后查看请求是否从那里做正确的事情。