【发布时间】:2016-05-17 05:51:51
【问题描述】:
Node.js 默认发送TLS_EMPTY_RENEGOTIATION_INFO_SCSV 密码以保护自己免受POODLE attack 的侵害。
我正在尝试通过使用自定义密码列表覆盖 TLS 密码来避免发送此密码(即使这可能会带来安全风险)。
但是,无论我做什么,Node.js 都会不断发送TLS_EMPTY_RENEGOTIATION_INFO_SCSV 密码。我试图故意避免发送此密码来模仿 Firefox/Chrome 的 TLS 协商。
这是我用来修改和检查节点发送的密码的代码:
var request = require('request');
var ciphers = [
'ECDHE-ECDSA-AES128-GCM-SHA256',
'ECDHE-RSA-AES128-GCM-SHA256',
'ECDHE-ECDSA-AES256-SHA',
'ECDHE-ECDSA-AES128-SHA',
'ECDHE-RSA-AES128-SHA',
'ECDHE-RSA-AES256-SHA',
'DHE-RSA-AES128-SHA',
'DHE-RSA-AES256-SHA',
'AES128-SHA',
'AES256-SHA',
'DES-CBC3-SHA'
].join(':');
var options = {
ciphers: ciphers,
secureProtocol: 'TLSv1_2_method',
url: 'https://www.howsmyssl.com/a/check'
};
request(options, function (error, response, body){
if (!error) {
console.log(body);
}
else {
console.log(error);
}
});
有什么方法可以禁止在 Node.js 中发送此密码?
【问题讨论】:
-
我认为这与 node.js 没有直接关系,而是与您正在使用的请求模块有关。还是您将问题调试到 node.js 核心?
-
我不确定这是否正确:"...如果我故意禁用协议降级(通过强制 TLS 1.2",则无需发送此密码。我相信所有TLS 版本会遭受降级攻击,因为 TLS不使用
{min-TLS,max-TLS}版本对。相反,TLS_FALLBACK_SCS会随着时间的推移而工作,所以它适用于连续连接,而不是真空中的单一连接尝试。 -
@migg 它位于 Node.js 核心中——查看ssl_lib.c#L1472,这似乎是 Node.js 中将 SCSV 密码添加到客户端 Hello 的位置(我可能错了关于该行,但它在该文件中)。
requestnpm 模块依赖于 Node.js 的tls包,它通过 openssl 处理 TLS 连接。 @jww 您可能是对的,它不安全,但是,我仍然想在测试用例中禁用它,并且此时不关心安全隐患。
标签: javascript node.js ssl openssl tls1.2