我遇到了尝试使用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日
有人能帮助我吗?有可能以某种方式完成这项工作吗?
答案 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开关。