【问题标题】:Calling a SOAP service requiring certificate using Nodejs使用 Nodejs 调用需要证书的 SOAP 服务
【发布时间】: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());
    }
});

【问题讨论】:

    标签: node.js soap wsdl ssl-certificate client-certificates


    【解决方案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 生成的,受信任的机构(应该将它提供给你的组织)。
    猜你喜欢
    • 2013-11-11
    • 2018-04-13
    • 2020-04-14
    • 1970-01-01
    • 2019-12-17
    • 2019-01-31
    • 2016-07-10
    • 2010-10-30
    • 1970-01-01
    相关资源
    最近更新 更多