带有Node的肥皂客户端和带有cerficate的强肥皂返回错误

时间:2018-09-17 07:39:10

标签: express soap strong-soap

我正在使用强肥皂(但使用node-soap的结果相同)节点模块来连接soap服务。

在第一步中,我将创建客户端并尝试连接一个方法(在本例中为“ doLogin”方法)。

我的代码是:

soap.createClient(url, clientOptions, (err, client) => {
var loginApi = { UserName: "xxxx", Password: "xxxxxx" };
var loginUser = {
  userName: "comercial@xxxxx.com"
};
client.addSoapHeader(header);
//client.setSecurity(new soap.BasicAuthSecurity(loginApi));
// we now have a soapClient - we also need to make sure there's no `err` here.
client.doLogin(loginUser, (err, result) => {
  //'result' is the response body
  console.error(err);
  console.log("Result: \n" + JSON.stringify(result));
});

但是变量err在控制台中返回此错误:

{ Error: unable to verify the first certificate
    at TLSSocket.<anonymous> (_tls_wrap.js:1105:38)
    at emitNone (events.js:106:13)
    at TLSSocket.emit (events.js:208:7)
    at TLSSocket._finishInit (_tls_wrap.js:639:8)
    at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:469:38) code: 
    'UNABLE_TO_VERIFY_LEAF_SIGNATURE' }

结果为undefined

  1. 为什么会发生此错误?
  2. 错误未定义结果?

2 个答案:

答案 0 :(得分:0)

我遇到了相同的错误,无法验证第一个证书。 这是因为未对SSL证书进行验证

您的nodejs脚本调用您的服务器,它将执行完整的TLS检查过程(如您所愿)。这将检查证书的有效性等。

要变通解决此问题,您可以运行以下步骤:

npm config set strict-ssl false

作为一种最佳实践,明智的做法是将其设置为正确的后缀,以免意外安装您实际上不信任的不受信任的模块。

此后,

npm cache clean --force

添加以下环境变量:

NODE_TLS_REJECT_UNAUTHORIZED=0

对于Linux:

export NODE_TLS_REJECT_UNAUTHORIZED=0

对于Nginx

NODE_TLS_REJECT_UNAUTHORIZED=0

对于Window: 这将仅针对当前命令提示符屏幕进行设置,

set NODE_TLS_REJECT_UNAUTHORIZED=0

这为我解决了问题。请尝试

注意:请确保在生产中不要保留此选项。请不要完全禁用TLS检查。

答案 1 :(得分:0)

已修复:

我添加了正确的证书和rejectUnauthorized: false来创建客户端,并在标题中添加了“信封”指令,现在它可以正常工作了。

我不喜欢安全主题中的说明rejectUnauthorized: false,并且我想知道如何在生产环境中删除它。

谢谢!!