Node JS请求具有所需p12证书的外部服务时出错

时间:2017-10-06 12:09:30

标签: javascript node.js http certificate ssl-certificate

有一项服务在某个URL下提供XML(例如:https://myxml)。该服务的组织向我发送了带密码的p12证书。 在浏览器中,它的工作正确。 在我的本地机器上,我正在运行Node JS服务器。我想从我的节点服务器发送请求并从服务获得响应。

我对证书很陌生。

这是我在尝试从服务中获取请求后得到的错误

error:0906D06C:PEM routines:PEM_read_bio:no start line

这是节点服务器中的实现

const request = require('request');
const fs = require('fs');
const path = require('path');
const certFile = path.resolve(__dirname, 'folder/cert.p12');

var options = {
  url: 'https://myxml',
  cert: fs.readFileSync(certFile),
  passphrase: 'xyz'
}


request.get(options);
request('https://myxml', function(error, response, body){
  console.log("error: ", error);
  console.log("statusCode: ", response && response.statusCode);
  console.log("body: ", body);
})

1 个答案:

答案 0 :(得分:0)

尝试以二进制形式读取文件并直接使用

var p12 = fs.readFileSync('file.p12', 'binary');
var p12Asn1 = forge.asn1.fromDer(p12, false);
var p12Parsed = forge.pkcs12.pkcs12FromAsn1(p12Asn1, false, 'password');

还在请求中添加agentOptions,如

request({
    method: 'GET',
    url: 'https://myxml',
    rejectUnauthorized: false,
    strictSSL: false, 
    agentOptions: {
        //pfx: pfx,
        pfx: require('fs').readFileSync('string_path_to_the_p12_key_file.p12'),
        passphrase: 'redacted_password'
    }
}