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