node.js openssl错误:dh键太小

时间:2016-03-14 09:55:16

标签: node.js ssl

我遇到了尝试使用node-soap发送soap请求的问题。 错误只出现在ubuntu上,我也在Windows上进行了测试 - 代码(显然不包括curl)正在那里工作。

我得到的错误是:

  

未处理拒绝错误:写EPROTO 140332284700480:错误:14082174:SSL例程:ssl3_check_cert_and_algorithm:dh键太小:../ deps / openssl / openssl / ssl / s3_clnt.c:3615:

我也尝试使用request/request也失败了。当使用普通卷曲时,我得到了服务器的响应,我试图连接到。

以下是我使用的代码:

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日

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

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

不应使用espacially EXP,就像ssl_v3一般。所以最好坚持@mscdex的答案......

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

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

  

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