使用 Nodejs 调用需要证书的 SOAP 服务
Posted
技术标签:
【中文标题】使用 Nodejs 调用需要证书的 SOAP 服务【英文标题】:Calling a SOAP service requiring certificate using Nodejs 【发布时间】:2019-05-23 20:16:37 【问题描述】:Nodejs SOAP 客户端抛出错误 [ERR_TLS_CERT_ALTNAME_INVALID]:主机名/IP 与证书的替代名称不匹配:
我正在尝试在 nodejs 中使用 soap 调用 SOAP 服务。但是我收到错误 [ERR_TLS_CERT_ALTNAME_INVALID]: Hostname/IP does not match certificate's altnames: IP: XXX.XXX.XXX.XXX is not in the cert's list:。我是 nodejs 的新手,不知道如何调用需要 nodejs 证书的 SOAP 服务。也欢迎在 Nodejs 中调用需要证书的 SOAP 服务的其他方式。
var url = "https://soapserviceurl?wsdl";
soap.createClient(url, function (err, client)
if (err)
console.log("Error Occurred!!");
console.log(err);
else
console.log(client.describe());
);
【问题讨论】:
【参考方案1】:请尝试
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" //this is insecure
要么:
var soap = require('soap'),
request = require('request'),
fs = require('fs');
var url = "https://soapserviceurl?wsdl";
var req = request.defaults(
strictSSL: false
);
soap.createClient(url,
request : req
, function(err, client)
//your code
);
或者:
soap.createClient(url,
request : req,
wsdl_options:
cert: fs.readFileSync('cert/cert.pem'), //path to pem
key: fs.readFileSync('cert/cert.key'), //path to private key
rejectUnauthorized: false
, function(err, client)
//your code
);
【讨论】:
谢谢。前两种方法效果很好。我已经使用站点信息(网址开头的小锁符号)从浏览器复制了证书。如何获取私钥? 您可以尝试使用 OpenSSL 等实用程序生成它。但我想你会得到另一个错误,关于不受信任的自签名证书,因为它们不是由 CA 生成的,受信任的机构(应该将它提供给你的组织)。以上是关于使用 Nodejs 调用需要证书的 SOAP 服务的主要内容,如果未能解决你的问题,请参考以下文章