最近,我一直在处理SOAP请求。
我设法使用node-soap模块将成功的请求发送到http服务。但是,现在我想使用它向外部 https Web服务发送请求。
我已设法使用带有cUrl的.cer文件发送SSL请求。但是当在node.js代码中尝试这个时,我会遇到错误。根据我的阅读(请参阅node-soap模块上的ClientSSLSecurity),我需要一个密钥(以.key格式)和一个证书(以.pem格式)。我不知道这是否需要私钥?我设法从.cer文件中提取公钥。
我尝试过以下代码:
var createSoapClient = function (){
soap.createClient(url, function(err,client){
client.setSecurity(new soap.ClientSSLSecurity(
'mycert.cer',
'pubkey.key'
));
if(err)
console.error(err);
else {
client.MyOperation(args,function(err,response){
if(err){
console.error(err);
}
else{
console.log(response);
}
})
}
});
}
但是,这会导致以下错误消息:
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
我错过了什么?它是私钥吗?
谢谢!
答案 0 :(得分:0)
根据npm发现的包,关于ClientSSLSecurity:
https://www.npmjs.com/package/axl-node-soap
https://www.npmjs.com/package/soap-x509
https://www.npmjs.com/package/strong-soap#clientsslsecurity
https://www.npmjs.com/package/soap#clientsslsecurity
我认为您向ClientSSLSecurity传递了错误的参数。它似乎是密钥然后是证书,您将证书传递给密钥。
尝试做这样的事情:
client.setSecurity(new soap.ClientSSLSecurity(
'pubkey.key',
'mycert.cer'
));
您使用的是哪个套餐?
您的密钥/证书可能是错误的
尝试重新生成证书:
openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem
openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out server.crt
然后将key.pem作为密钥,将server.crt作为证书传递。