我正在设置一个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能抵抗野兽。如果我们很容易受到野兽的伤害,我们就无法获得A级。
如果客户端支持,我愿意支持PFS (前向保密)。
基于我的阅读,我“必须产生一些随机性”通过生成Diffie-Hellman参数,并以某种方式进入我的证书,然后服务器将正确地实现ECDHE的前向保密。我在某个地方读到,ECDHE比DHE更不需要CPU,所以这是一个好处。
我有很多问题要问。但我会问第一个问题:
为什么我必须产生“一些随机性”来附加证书,它有什么用途,以及命令的实际作用是什么?dhparam上的OpenSSL页面并没有告诉我它实际做了什么。
我看过这个答案,正在寻找一个更清晰的解释(或者至少参考相关的阅读!)
根据OpenSSL密码的说法,ECDHE看起来是一个TLS1.2密码。在Qualys‘’PFS页面上,它说所有主要的现代浏览器都支持ECDHE,但是我在通过TLS1.2连接的iOS6测试结果中只看到了iOS6。我想我可以采取“握手模拟”的一小部分。
另一个问题是,如果我将SSLLabs条目保留在密码列表中,为什么HIGH会使用A来计算:这将使服务器支持连接,例如TLS_RSA_WITH_AES_128_CBC_SHA (报告同样指出),这很容易受到猛兽的攻击!也许是因为它从未用报告没有RC4支持的“客户端”进行测试。
还有一个问题:在OpenSSL密码页上,TLS1.2密码套件下的列表包括:
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 ECDHE-RSA-AES128-SHA256这是否表明,如果我得到它连接的ECDHE,现在是容易受到野兽以及由于使用CBC?例如,我应该把这个切换到谷歌做的事情上:用RC4进行ECDHE。但是密码页面不包括任何看起来像ECDHE-RSA-RC4-SHA的内容。然而,有ECDHE-ECDSA-RC4-SHA。这有什么不同?编辑:这就是答案提到ECDSA是独立于RSA的东西。我想复制谷歌对ECDHE_RSA+RC4+SHA所做的事情,因为这似乎是性能和安全性的完美结合。
更多的注释(请告诉我,如果我误解了一些事情,特别是那些伪装成问题的陈述):
通过选择对称密码(RC4对AES等)来控制野兽的弹性。许多客户端不支持不使用CBC的AES模式?所以我们应该完全避免AES .PFS可以通过Diffie-Hellman密钥交换获得,只有包含DHE或ECDHE的模式才能满足这一要求。只有OpenSSL支持完美的前向保密。RC4比AES快。RC4比AES好(因为野兽)?
另一个编辑:让我们看看..。这里是一个迹象,表明野兽不是什么太现实的担心,尽管它消极地影响了SSLLabs评级。那个大的"A“看起来好极了..。让我看看..。我可能仍然应该把RC4_128密码器放在密码链的开头,如果没有其他原因证明它们是“坏的”,并且比AES一般要快的话。不管怎样,我偏离了最初的主题,那就是ECDHE。以及如何使DH参数与Node/Express一起正常工作?
发布于 2013-06-30 05:47:59
在SSL中,传统的基于RSA的交换是很好的,因为使用非对称加密生成和传输随机会话密钥,因此只有私钥的所有者才能读取它。这意味着会话不能由任何人解密,除非他们拥有证书的私钥。但是,如果第三方保存加密的通信量并最终获得私钥,他可以使用该密钥从SSL交换中解密会话密钥,然后使用该密钥解密整个会话。所以这不是完美的向前保密。
完善前向保密的关键是Diffie-Hellman密钥交换。DH是一种非常酷的算法,用于在双方之间生成共享密钥,这样一个观察者看到所有东西--即双方之间的全部交换--就不能仅仅从通过电线发送的内容中导出密钥。导出的密钥是一次性使用的,从未存储、从未传输,也永远不能被任何人驱动。换句话说,完美的向前保密。
单靠DH并不能保护你,因为没有身份和身份验证,所以扮演中间人是微不足道的。因此,您可以继续使用RSA进行身份验证,只需使用Diffie-Hellman来生成会话密钥。这就是DHE-RSA-*,例如:DHE-RSA-AES128-SHA1是一种密码规范,它使用Diffie-Hellman生成密钥,RSA用于身份验证,AES-128用于加密,SHA1用于摘要。
但是Diffie-Hellman首先需要一些设置参数。这些不是秘密,可以重复使用;另外,生成它们需要几秒钟时间。但是它们应该是“干净的”,由您生成,这样您就知道它们不是由攻击者提供的。dhparam步骤提前生成DH参数(主要是一个大素数),然后将其存储给服务器使用。
最近的一些研究表明,虽然“破坏”DH交换(即从交通中获得密钥)是困难的,但相当一部分困难的工作可以简单地根据素数提前完成。这意味着,如果所有地方都使用相同的DH素数,那么这些质数就成为资金充足的机构进行计算的“首要”目标。这表明,在生成自己的素数(而不是依赖软件附带的素数)以及定期重新生成这些素数时,存在一定程度的安全性。
有趣的一点是,椭圆曲线Diffie-Hellman是一个改进的Diffie-Hellman交换,它使用椭圆曲线密码,而不是传统的RSA风格的大素数。所以,虽然我不确定它可能需要什么参数(如果有的话),但我不认为它需要您生成的那种参数。
另请参阅:
关于野兽
猛兽攻击依赖于AES在较早版本的SSL上使用的块链接方法的一些工件。较新版本的SSL做的事情是正确的,所以不用担心。RC4不是块密码,所以没有块链接。猛兽袭击是如此的难以成功,以至于它在现实世界中的影响是绝对不存在的。事实上,RC4也有它自己的一些弱点,特别是当滥用野兽攻击的方式时。所以你可能并没有得到更好的安全保障。
当然,强制使用TLS1.2可以解决所有理论上的安全问题,同时阻止许多访问者实际连接。和使用ECDHE没什么不同。
发布于 2013-07-01 13:17:39
在"DHE“密码套件中,服务器动态生成一个新的迪夫-赫尔曼密钥对,用其RSA或DSA或ECDSA私钥签名公钥,并将其发送给客户端。DH键是“短暂的”,这意味着服务器永远不会将其存储在其磁盘上;它在SSL握手期间将其保存在RAM中,然后将其完全忘记。因为它从来不被存储,所以以后就不能被偷了,这就是PFS的来源。请注意,此DH业务从不输入证书:服务器证书包含服务器的永久公钥,类型为RSA或DSA或ECDSA,仅用于签名。
Diffie-Hellman,一般说来,是在有限群中计算的一种算法,在该算法中,计算简单,但离散对数很难。在“平原”DH中,群由一些整数组成,模是一个大素数p,乘法是群律。DH参数是该组的定义,即大素数p和传统的生成器g。为了安全起见,对几个密钥对重用相同的参数没有问题,包括使用与其他人相同的DH参数。需要的是参数是“公平的”,即质数p是随机产生的,而不是巧尽心思使离散对数简单地模成素数。
生成您自己的DH参数是一种“确保”使用适当的随机DH参数的方法。不过,这更像是一种仪式,而不是科学: SSL服务器库应该附带默认的DH参数,这些参数都很好,而且根据定义,您已经相信SSL库不会对您进行恶意的操作。
ECDHE遵循相同的行,只不过它在另一个组(即椭圆曲线 )中应用DH。椭圆曲线有一些计算上的好处,但不太被广泛支持。生成你自己的DH参数的模拟方法是选择你自己的随机曲线。实际上没有人这样做,因为:
至于野兽,不要太担心它。这是对客户端的攻击,而不是对服务器的攻击,现代客户端包括解决方案(特别是"1/n-1拆分“)。这是一个不错的攻击,但它不再起作用了。服务器能做的唯一的事情就是强迫一个不知情的老客户端使用RC4 (它不受构造的影响)。
请注意,BEAST只适用于SSL3.0和TLS1.0。对于TLS 1.1和1.2,即使对称密码是CBC模式下的分组密码,TLS也根本不起作用。
发布于 2017-02-28 12:49:08
RC4能抵抗野兽。
诚然,使用流密码可以避免野兽和贵宾狗,但是RC4也有自己的问题。密钥流已知的偏差可以泄漏信息。
在猛兽被发现后的一段时间里,RC4被短暂地回顾了一遍,但在意识到RC4中的密钥流偏差问题有多么糟糕之前,它被短暂地回顾了一遍。
如果我们很容易受到野兽的伤害,我们就无法获得A级。
这在某种程度上可能是正确的,现在已经不再是这样了。
qualys人认为野兽比RC4还小。
为什么我必须生成“一些随机性”来附加到证书,它有什么用途,以及命令实际上做了什么?dhparam上的OpenSSL页面并没有告诉我它实际做了什么。
dhparam生成用于传统diffie-hellman (而不是ECDH)的参数。这些参数不是秘密的,但是DH是安全的,它们必须满足某些条件。您可能希望生成自己的参数,这有几个原因。
Afaict没有使用RC4的加密程序。因此,在您的配置中,只有当客户端不支持您显式标识的密码套件,并最终使用"HIGH“列表中的一个传统的"DHE”密文套件时,这才是重要的。
如果客户端支持,我愿意支持PFS (前向保密)。
为了实现保密,您需要使用DHE或ECDHE密码套件,因此,如果正向保密是您的优先事项,您应该将这些优先于任何其他密匙。为了获得最好的兼容性和性能,您应该将ECHDE密码套件放在相应的DHE密码套件前面。
最后,在将密码套件列表硬编码到您的软件中之前,请仔细考虑。什么样的选择被认为是最好的,并且确实会随着时间的推移而改变。
https://security.stackexchange.com/questions/38206
复制相似问题