我正在设置一个 node.js 服务器:
https.createServer({
...
ciphers: 'ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH',
honorCipherOrder: true
}, app).listen(443);
这是一个能够达到 SSLLabs A 评级的,这很好。现在,握手模拟中的所有协商似乎都是使用TLS_RSA_WITH_RC4_128_SHA
.
RC4 对 BEAST 具有弹性。如果我们容易受到 BEAST 的攻击,我们将无法获得 A 评级。
如果客户支持,我想支持 PFS(前向保密)。
根据我的阅读,我“必须通过生成 Diffie-Hellman 参数来生成一些随机性”,并以某种方式将其放入我的证书中,然后服务器才能正确实施 ECDHE 以实现前向保密。我在某处读到 ECDHE 的 CPU 密集度低于 DHE,所以这是一个优点。
好吧,我有很多问题。但我会问第一个:
为什么我必须生成“一些随机性”来附加到证书,它的用途是什么,以及该命令的实际作用是什么?dhparam 上的 OpenSSL 页面并没有告诉我很多关于它的实际作用。
我已经看到了这个答案,并且正在寻找更清晰的解释(或至少参考相关阅读!)。
根据OpenSSL Ciphers,ECDHE 似乎是 TLS 1.2 密码。在Qualys 的 PFS 页面上,它说所有主要的现代浏览器都支持 ECDHE,但我在通过 TLS1.2 连接的 SSLLabs 测试的结果中只看到 iOS6。我想我可以对“握手模拟”部分持保留态度。
另一个问题是,如果我将条目保留在密码列表中,为什么 SSLLabs 的评分为 A HIGH
:这将使服务器支持连接TLS_RSA_WITH_AES_128_CBC_SHA
,例如(报告显示同样多),这很容易受到 BEAST 的攻击!也许是因为它从未使用报告不支持 RC4 的“客户端”进行测试。
还有一个问题:在 OpenSSL 密码页面上,TLS 1.2 密码套件下的列表包括:
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 ECDHE-RSA-AES128-SHA256
这是否表明如果我确实将它与 ECDHE 连接,由于使用 CBC 而现在也容易受到 BEAST 的影响?例如,我应该像谷歌那样切换它:ECDHE with RC4。但是密码页面不包含任何看起来像 ECDHE-RSA-RC4-SHA 的东西。然而,有一个 ECDHE-ECDSA-RC4-SHA。这有什么不同?编辑:这个 SO answer提到 ECDSA 与 RSA 是分开的。我想复制 Google 对 ECDHE_RSA+RC4+SHA 所做的事情,因为这似乎是性能和安全性的完美结合。
更多注释(如果我误解了一些事情,请告诉我,尤其是伪装成问题的陈述):
BEAST 弹性通过选择对称密码(RC4 与 AES 等)来控制。许多客户端不支持不使用 CBC 的 AES 模式?所以我们应该完全避免AES......?PFS 可以通过使用 Diffie-Hellman 密钥交换来获得,并且只有包含DHE
或ECDHE
满足这一点的模式。只有 OpenSSL 支持完美的前向保密。RC4 比 AES 快。RC4 比 AES 好(因为 BEAST)?
另一个编辑:让我们看看......这表明 BEAST 并不是太现实地关注的事情,尽管它会对 SSLLabs 评级产生负面影响。那个大“A”看起来真好……让我们看看……我可能仍然应该将 RC4_128 密码放在密码链的开头,如果没有其他原因,它们没有被证明是“坏的”,并且是通常比 AES 快。无论如何,我已经偏离了最初的主题,即 ECDHE。以及如何让 DH 参数与 Node/Express 一起正常工作?