Nodejs请求一个带有.p12证书的Web服务

所以,标题非常简单。 我想从一家公司使用Web服务,并且获得了.cer和.p12文件。 据说,在提出请求时我应该使用.p12。 我已经将.cer导入Windows,并且可以轻松地向邮递员发送请求。 但是当我试图用node.js做请求时,我得到错误。 这里是代码,我正在使用request模块:

 var headersOpt = { "content-type": "application/json", }; var options = { url: 'https://some-url/api', cert: fs.readFileSync(__dirname + '/certs/myCert.p12'), headers: headersOpt }; request.get(options, (error, response, body) => { console.log(error); console.log(response); console.log(body); }); 

我得到这个错误:

 { Error: error:0906D06C:PEM routines:PEM_read_bio:no start line at Object.createSecureContext (_tls_common.js:89:17) at Object.exports.connect (_tls_wrap.js:1048:48) at Agent.createConnection (https.js:111:22) at Agent.createSocket (_http_agent.js:224:26) at Agent.addRequest (_http_agent.js:192:10) at new ClientRequest (_http_client.js:256:16) at Object.request (http.js:39:10) at Object.request (https.js:239:15) at Request.start (D:\parser\node_modules\request\request.js:748:32) at Request.end (D:\parser\node_modules\request\request.js:1512:10) opensslErrorStack: [ 'error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib' ] } 

对于pkcs12格式,请在agentOptions使用pfx属性:

 'use strict'; const request = require('request'); const fs = require('fs'); var options = { url: 'https://some-url/api', headers: { "content-type": "application/json", }, agentOptions: { pfx: fs.readFileSync(__dirname + '/certs/myCert.p12'), passphrase: '' } }; request.get(options, (error, response, body) => { console.log(error); console.log(response); console.log(body); }); 

如果您的证书是自签名的,请选中此项