使用ssllabs.com的扫描告诉我RC4正在使用中。 我读了在Windows 2012 R2中应默认禁用RC4。 我使用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
我按照这些说明禁用了registry中的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
仍然得到相同的消息,说RC4正在使用,我的成绩从B下降到C,所以设置node.js密码列表确实有影响。
单击“最佳做法”选项后,使用IIS Crypto禁用RC4密码导致我的ssllabs扫描结果没有差异。
我怀疑它与节点configuration有关,但是即使指定如上所述的密码列表仍然导致扫描说RC4正在使用。
我如何诊断这个禁用RC4或找出它在哪里使用,所以我可以禁用它?
禁用registry中的任何内容只会影响使用Windows组件RC4(IIS / IE)的内容。 IISencryption也不相关 – 因为您不使用IIS。
但是您正在使用https.createServer构build的https.createServer 所有与RC4相关的设置都将在node.js中发生(因为node.js不关心registry)。
更新的更好的密码已经被添加到node.js中,它将随着下一个版本的node.js自动发布
如果您正在使用node.js 0.12,则从当前源更新您的密码列表 。
看起来您已经正确指定了密码。 但是你确定这是你正在执行的代码吗? 如果您使用node.js 0.12或更高版本,那么默认情况下禁用RC4! 确保一切正常更新和库的顺序。
当你创build内置的服务器实例时,它看起来像这样:
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);
如果您使用的是最近的node.js,则不应指定密码,而只需使用默认值即可。 但是为了debugging目的,列出它们可能是实际的。
对于简单的debugging,然后简单地继续使用SSL实验室。 如果SSL实验室仍然说RC4已启用 – 然后尝试禁用其他密码套件之一,以确认您实际上正在更改正在使用的实际代码。 如果你看不到改变 – 那么切换到提琴手,以确保我们正在与正确的服务器交谈。
var agent = new https.Agent所谓的“config”是不相关的。 该片段创build一个https.Agent(客户端),并指定您想要连接的密码。 然后,如果从服务器提供这些密码,则会连接其中一个密码。 有趣的部分是https.createServer
了解,当你浏览服务器,并使用Fiddler设置标题 – 那么你做同样的var agent = new https.Agent 。 你要求什么密码套件你想使用。 尝试只使用Fiddler请求RC4,看看是否被接受。 然后,您应该查看服务器返回的内容,以确认您确实在与您认为自己的node.js实例“交谈”!
上面的代码片段和A +的一步一步的说明可以在CertSimplefind
故障排除步骤
validationnode.js版本
validation节点/ lib / tls.js版本
确认您正在连接到正确的node.js实例(启动/连接/停止/连接)
设置提琴手只接受RC4
如果提琴手连接RC4 – 那么你需要修改一些代码。 如果Fiddler无法与RC4连接,并且SSL Labs仍然存在,那么您的Node.js和SSL实验室之间就有一个代理(或者其他的东西)。
更新:如果Fiddler太难configuration – 那么可以在超级用户上find一些用于validation服务器接受的密码的实用工具
我认为registryconfiguration只影响浏览器,所以你需要在node.js设置你的密码。 这对我来说是有效的:
var agent = new https.Agent({ "key": key, "cert": cert, "ciphers": 'EECDH+AES128:EECDH+3DES:EDH+3DES:!SSLv2:!MD5:!DSS:!aNULL', "honorCipherOrder": true });
我想出了答案。
TLS的默认密码是:
ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:A零位
我通过检查tls.DEFAULT_CIPHERS属性find了这个。
包括通知RC4。
所以https的默认密码是好的,但是tls有它自己的密码默认值。