节点 JS 请求外部服务出错,需要 p12 证书



有一个服务在某个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);
})

尝试将文件作为二进制文件读取并直接使用它

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'
    }
}

最新更新