在SSL中,客户端连接并发送它所支持的密码列表;那么服务器会选择其中一个也支持的密码,并且该密码用于连接。只有当连接建立时(“握手”完成)HTTP才会起作用。
在您的设置中,这意味着您应该配置您的SSL服务器以接受各种密码,但要优先使用128位以上的私钥而不是其他密钥。因此,只有当客户端和服务器都不支持128位或更多的密码时,才会选择小于128位的密码。然后,根据实际协商的密码,在该连接内发送的页面将被更改。
对于这样的设置,你必须能够做到以下几点:
- 用来配置SSL服务器支持的密码列表;
- 在客户端和服务器都支持的密码列表中强制执行客户端首选项的服务器首选项;
- 访问您的页面生成引擎中实际使用的密码,例如PHP。
在Apache的mod_ssl,看来1点很容易(“的SSLCipherSuite”指令)和“环境变量”一节似乎表明SSL服务器愿意给上选择什么密码的一些信息页面生成引擎;尤其是SSL_CIPHER_USEKEYSIZE
变量看起来相当不错。因此第3点看起来也很容易。但我不确定这是如何转化为PHP世界的。
对于第2点,这有点困难。 “SSLCipherSuite”的文档似乎告诉服务器,默认情况下,它使用自己的首选顺序,因此第二点也很容易,但这需要一些测试。
现在只剩下一个小点,这就是3DES的状态。名义上,它使用一个192位密钥。任何体面的密码编程者或程序员都会指出,在这192位中,只有168位被使用(额外的位应该用作奇偶校验位,但没有人会证实这些位,他们只是被忽略)。现在,一些学者还表示,实际的算法强度较低,至少在适当的学术光线下看来,与112位密钥相当。因此,NIST(美国联邦机构处理此类标准)因此发布了一项建议,即3DES应被视为提供“仅112位安全性”,并且112低于128.
当然,112位在技术上不可行的领域还有很长的路要走(即使技术进步一直保持其繁忙的步伐,至少应该保持30年),所以这对于任何实际情况都不是问题,但如果您处于一个标准疯狂的思维框架,并希望执行“真正的”128位,那么这是一个需要考虑的问题。
@CalebD - 感谢您指点我“保持简单愚蠢”。我决定保持简单,并告诉客户如何自行检查浏览器的密码强度。 – 2010-02-02 20:23:28