【问题标题】:node.js openssl error: dh key too smallnode.js openssl 错误:dh 键太小
【发布时间】:2016-03-14 09:55:15
【问题描述】:

我在尝试使用 node-soap 发出肥皂请求时遇到了问题。 该错误仅在 ubuntu 上,我也在 windows 上测试过 - 代码(显然不包括 curl)在那里工作。

我得到的错误是:

未处理的拒绝错误:写入 EPROTO 140332284700480:error:14082174:SSLroutines:ssl3_check_cert_and_algorithm:dh key too small:../deps/openssl/openssl/ssl/s3_clnt.c:3615:

我也尝试过使用request/request,但也失败了。使用普通 curl 时,我会从我尝试连接的服务器收到响应。

这是我正在使用的代码:

exec('curl ' + url, function(err, res) {
        log(err); // null
        log(res); // expected response
    });  

request.postAsync({
        url,
        rejectUnauthorized: false,
        requestCert: true,
    }).then(val => {
        log(val);
    }).catch(err => {
        log(err); // above error message
    })

soap.createClientAsync(url).then(val => {
        log(val);
    }).catch(err => {
        log(err); // above error message
    })

我在以下版本上进行了测试:

节点 4.4.0 和 5.8.0, ubuntu 服务器版本 14.04 和 ubuntu 15.04 桌面版

openssl 版本是 OpenSSL 1.0.2f 2016 年 1 月 28 日

有人可以帮助我吗?是否有可能以某种方式完成这项工作?

【问题讨论】:

    标签: node.js ssl


    【解决方案1】:

    服务器很可能在 TLS 握手期间尝试使用安全性较低的 Diffie-Hellman 密钥。唯一的解决办法是让服务器管理员升级/修复他们的软件。

    【讨论】:

    • 我通过 openssl -connect ... 进行了检查,结果 Server Temp Key: DH, 768 bits -- too bad...
    【解决方案2】:

    Please note that you should not do this,因为它被认为是不安全的 - 但如果没有其他方法,您可以设置 --tls-cipher-list 标志并启用您需要的密码 - 例如:

    node --tls-cipher-list="EXP-EDH-RSA-DES-CBC-SHA" index.js
    

    尤其不应使用EXP,就像一般的 ssl_v3 一样。所以最好坚持@mscdex 的回答...

    您可以在 tls 文档中阅读更多相关信息:https://nodejs.org/api/tls.html#tls_modifying_the_default_tls_cipher_suite

    文档中关于此的最后一部分:

    请注意,Node.js 中包含的默认密码套件经过精心挑选,以反映当前的安全最佳实践和风险缓解措施。更改默认密码套件会对应用程序的安全性产生重大影响。 --tls-cipher-list 开关应仅在绝对必要时使用。

    【讨论】:

      猜你喜欢
      • 2020-06-25
      • 2016-10-27
      • 1970-01-01
      • 2020-11-23
      • 2018-04-11
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多