【问题标题】:SOAP request and "SSL routines:ssl3_read_bytes:sslv3 alert handshake failure"SOAP 请求和“SSL 例程:ssl3_read_bytes:sslv3 警报握手失败”
【发布时间】:2017-01-01 23:17:55
【问题描述】:

我有一个 PFX 文件。我生成了 PEM 和 KEY 文件:

  • openssl pkcs12 -in cert.pfx -out cert.pem -clcerts -nokeys
  • openssl pkcs12 -in cert.pfx -out cert.key -nocerts -nodes

我的 Node.js 配置文件如下所示:

var soap = require('soap'),
fs = require('fs');
var url = 'https://file.wsdl';
var auth = "Basic " + new Buffer("username" + ":" + "password").toString("base64");

soap.createClient( url, {wsdl_options: {

    cert: fs.readFileSync('cert/cert.pem'),
    key: fs.readFileSync('cert/cert.key'),
    strictSSL: false,
    rejectUnauthorized: false
},  wsdl_headers: {Authorization: auth}, endpoint : 'https://linkToPostHttpsRequest'}, function(err, client) {

if(err) {throw err;}

client.admGetSubscriber({input: {msisdn: asdasd}}, function(err, result){
    throw err;
    console.log(result);
});

Node.js 告诉我这个错误:

Error: write EPROTO 101057795:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake
failure:openssl\ssl\s3_pkt.c:1472:SSL alert number 40
101057795:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:openssl\ssl\s3_pkt.c:656:

    at exports._errnoException (util.js:1007:11)
    at WriteWrap.afterWrite (net.js:793:14)

我尝试导入 PFX 证书,但遇到了同样的错误。还有其他我应该包括的选项吗?

【问题讨论】:

  • “SSL 警报编号 40” 可能表示协议和密码存在问题。确保您使用的是 TLS 1.0 及更高版本,并且其中有一个通用密码套件。您必须在https://linkToPostHttpsRequest 测试服务器。
  • 对我来说同样的问题! :(
  • 这里一样 /// 有人吗?

标签: node.js ssl openssl soap-client


【解决方案1】:

尝试添加请求选项 'ciphers': 'ALL'。

代码:

var soap = require('soap'),
    request = require('request'),
    fs = require('fs');
var url = 'https://file.wsdl';
var auth = "Basic " + new Buffer("username" + ":" + "password").toString("base64");

var request_with_defaults = request.defaults({ 'ciphers': 'ALL' });

soap.createClient(url, {

    request: request_with_defaults,
    wsdl_options: {

        cert: fs.readFileSync('cert/cert.pem'),
        key: fs.readFileSync('cert/cert.key'),
        strictSSL: false,
        rejectUnauthorized: false
    }, wsdl_headers: { Authorization: auth }, endpoint: 'https://linkToPostHttpsRequest'
}, function (err, client) {

    if (err) { throw err; }

    client.admGetSubscriber({ input: { msisdn: asdasd } }, function (err, result) {
        throw err;
        console.log(result);
    });
});

【讨论】:

    猜你喜欢
    • 2014-12-10
    • 2019-08-16
    • 2015-08-29
    • 2016-10-10
    • 2016-04-27
    • 2020-09-14
    • 1970-01-01
    • 2017-10-13
    相关资源
    最近更新 更多