在实施之前,我应该注意哪些陷阱或常见错误?任何管理、特定于实现或特定于平台的内容?脑海中浮现出一些。
前向保密 TLS 中使用了两种密钥交换算法。DHE 和 ECDHE。要与最广泛的客户保持保密,您需要同时支持两者。通常,您应该优先选择 ECDHE 而不是 DHE,因为它性能更好并且与 Java 7 兼容(见下文)。
强制前向保密将排除 Windows XP 上的 Internet Explorer(任何版本)。我希望在 XP 上使用 SSL/TLS 堆栈中内置的窗口的任何东西都是如此。
对于 DHE,您需要确保使用强 dh 参数。您应该使用具有至少 2048 位素数的自定义生成的 dh 参数(dh 素数的安全性与相同长度的 RSA 密钥相当)。
如果您协商 DHE 密码套件并使用大于 1024 位的 DH 参数,Java 6 和 7 就会中断。这是 java 6 的一个特别严重的问题,因为它不支持 ECDHE。
在我们的服务器上强制执行 PFS 之前,我想对不兼容性进行说明并做好准备。
一种选择可能是使前向保密密码套件成为首选但不是强制性的,并设置您的服务器以记录每个连接使用的密码套件。然后,您可以查看您的日志并确定如果您强制执行前向保密,您将失去多少客户。
对 PFS 能做什么和不能做什么有误解吗?我们的审计部门是否需要进行现实检查?
基本上,前向保密的作用是防止有人窃取您的密钥,使用它来被动解密流量。特别是在没有前向保密的情况下,一直在监控和存储您的流量并随后窃取您的密钥的人可以返回并解密他们之前捕获的流量。
前向保密不会做的是防止窃取您的密钥的人使用它来冒充您(并且充当中间人或用他们的服务器替换您的服务器)。
如果对称加密被破坏,前向保密将无济于事。用于前向保密密钥交换的密码学也可能被破坏(请参阅有关上述 dh 参数的评论)。
PFS 的好处是否受到应用程序的限制?(网络与 smtp 等)
好处是相同的,但您可能会发现客户的支持并不常见。