cis*_*iso 6 security https web-server node.js windows-server-2012-r2
使用 ssllabs.com 的扫描告诉我 RC4 正在使用中。我读到 RC4 应该在 Windows 2012 R2 中默认禁用。我正在使用 https.createServer 运行 node.js 服务器而不指定密码(让它默认)
ssllabs.com 说:
This server accepts the RC4 cipher, which is weak
TLS_RSA_WITH_RC4_128_SHA (0x5) WEAK
TLS_ECDHE_RSA_WITH_RC4_128_SHA (0xc011) WEAK
Run Code Online (Sandbox Code Playgroud)
我已按照以下说明在注册表中禁用了 RC4:http : //windowsitpro.com/windows/disabling-rc4-cipher
我还尝试在节点 createHttpsServer 中指定密码,如下所示:
ciphers:
[ "ECDHE-RSA-AES128-GCM-SHA256",
"ECDHE-ECDSA-AES128-GCM-SHA256",
"ECDHE-RSA-AES256-GCM-SHA384",
"ECDHE-ECDSA-AES256-GCM-SHA384",
"DHE-RSA-AES128-GCM-SHA256",
"ECDHE-RSA-AES128-SHA256",
"DHE-RSA-AES128-SHA256",
"ECDHE-RSA-AES256-SHA384",
"DHE-RSA-AES256-SHA384",
"ECDHE-RSA-AES256-SHA256",
"DHE-RSA-AES256-SHA256",
"HIGH",
"!aNULL",
"!eNULL",
"!EXPORT",
"!DES",
"!RC4",
"!MD5",
"!PSK",
"!SRP",
"!CAMELLIA"
].join(':'),
honorCipherOrder: true
Run Code Online (Sandbox Code Playgroud)
仍然收到相同的消息,说 RC4 正在使用中,我的成绩从 B 降到 C,因此设置 node.js 密码列表确实有影响。
在单击最佳实践选项后使用 IIS Crypto 禁用 RC4 密码导致我的 ssllabs 扫描结果没有差异。
我怀疑它与节点配置有关,但即使如上所述指定密码列表仍然会导致扫描显示 RC4 正在使用中。
我如何诊断它以禁用 RC4 或找出它的使用位置以便我可以禁用它?
小智 5
禁用注册表中的任何内容只会影响使用 RC4 (IIS/IE) 的 Windows 组件的内容。IIS Crypto 也不相关 - 因为您没有使用 IIS。
但是您正在使用内置的 node.js https.createServer。所有与 RC4 相关的设置都将发生在 node.js 中(因为 node.js 不关心注册表)。
较新的更好的密码已经被添加到node.js的将与下一个版本的自动到来的node.js
如果您使用的是 node.js 0.12,则从当前源更新您的密码列表。
看起来您已经正确指定了密码。但是你确定这是你正在执行的代码吗?如果您使用的是 node.js 0.12 或更高版本,则默认情况下禁用 RC4!确保一切都正确更新并且库井井有条。
创建内置服务器实例时,它看起来像这样:
var server = https.createServer({
key: privateKey,
cert: certificate,
ca: certificateAuthority,
// default node 0.12 ciphers with RC4 disabled!!!
ciphers: [
"ECDHE-RSA-AES256-SHA384",
"DHE-RSA-AES256-SHA384",
"ECDHE-RSA-AES256-SHA256",
"DHE-RSA-AES256-SHA256",
"ECDHE-RSA-AES128-SHA256",
"DHE-RSA-AES128-SHA256",
"HIGH",
"!aNULL",
"!eNULL",
"!EXPORT",
"!DES",
"!RC4",
"!MD5",
"!PSK",
"!SRP",
"!CAMELLIA"
].join(':'),
honorCipherOrder: true
}, app);
Run Code Online (Sandbox Code Playgroud)
如果您使用的是最新的 node.js,则不应指定密码,而应使用默认值。然而,出于调试目的列出它们是可行的。
对于简单的调试,只需继续使用 SSL Labs。如果 SSL Labs 仍然说 RC4 已启用 - 则尝试禁用其他密码套件之一以验证您实际上正在更改正在使用的实际代码。如果您没有看到任何变化 - 则切换到 Fiddler 以确保我们正在与正确的服务器交谈。
在var agent = new https.Agent所谓的“配置”是不相关的。该片段正在创建一个 https.Agent(客户端)并指定您想要连接的密码。如果它们是从服务器提供的,那么您将使用这些密码之一进行连接。有趣的部分是https.createServer
了解当您使用 Fiddler 浏览服务器并设置标题时,您所做的与var agent = new https.Agent. 您请求要使用的密码套件。尝试仅使用 Fiddler 请求 RC4,看看是否被接受。然后,您应该查看从服务器返回的内容,以验证您实际上是在与您认为的 node.js 实例“对话”!
上面的代码片段和A+的分步说明可以在CertSimple找到
故障排除步骤:
验证 node.js 版本
验证 node/lib/tls.js 版本
验证您是否连接到正确的 node.js 实例(启动/连接/停止/连接)
将 Fiddler 设置为仅接受 RC4
如果 Fiddler 与 RC4 连接 - 那么您需要修改一些代码。如果 Fiddler 无法与 RC4 连接 - 而 SSL Labs 仍然可以连接 - 那么您的 node.js 和 SSL Labs 之间就有一个代理(或其他东西!)。
更新: 如果 Fiddler 太难配置 - 那么可以在Superuser上找到一些实用的工具来验证服务器接受的密码
我找到了答案。
TLS 的默认密码是:
ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:高:!MD5:!aNULL
我通过检查 tls.DEFAULT_CIPHERS 属性发现了这一点。
注意 RC4 已包含在内。
因此 https 的默认密码很好,但是 tls 有自己的默认密码。
| 归档时间: |
|
| 查看次数: |
5493 次 |
| 最近记录: |