【问题标题】:How can I test a browser to see if it supports 128-bit encryption?如何测试浏览器以查看它是否支持 128 位加密?
【发布时间】:2013-02-09 22:38:56
【问题描述】:

我的任务是寻找一段旧代码的替代品。我假设它经过测试以查看浏览器是否支持 128 位加密。这是旧代码:(我故意将链接分成 4 行)

@987654321@
?good=../docs/html/good.html
&nsbad=../docs/html/upgradeNSonly.html
&ie2=../docs/html/upgradeIEonly.html

大家以前都看过这段代码吗?
如何在 php 页面中复制此功能?

澄清
旧网站管理员找到了一个链接到威瑞信,该链接对浏览器进行了检查。威瑞信已停止支持此链接。就个人而言,我认为我们应该简单地告诉我们的客户点击浏览器中的 Help > About 并寻找密码强度。如果不是至少 128,那么我们只是告诉他们升级那里的浏览器。

【问题讨论】:

    标签: php browser encryption cross-browser


    【解决方案1】:

    所有现代浏览器都支持开箱即用的 128 位加密。您是否需要支持 IE 5.5 之前的浏览器?

    您可以检查浏览器的 User-Agent 字符串并做出假设,或者您可以将他们定向到使用 128 位 SSL 证书的页面,如果他们继续通过它......好吧,他们必须支持它。

    【讨论】:

    • @CalebD - 感谢您将我指向“保持简单愚蠢”。我决定保持简单,只向客户展示如何自行检查浏览器的密码强度。
    【解决方案2】:

    您在此处粘贴的内容不是代码 - 它是一个 URL。

    如果您不了解其中的区别,那么我希望您不会真正理解“您如何衡量 php 中的加密质量?”这一隐含问题的任何答案。但不管怎样……

    首先,除了测试使用该加密方法的连接之外,没有其他方法可以测试浏览器是否支持特定的加密算法或密钥大小 - 这意味着在您的服务器上配置多个不同级别的加密并在每个中创建网页然后测试浏览器可以连接到什么。这不是一项微不足道的任务,也不是大多数人在正常生活中会遇到的事情。

    如果您在 apache 上使用 mod_ssl,并结合 mod_php(您没有说明 PHP 运行在什么操作系统/网络服务器上),那么您将能够看到各种附加的 $_SERVER 变量,包括“SSL_CIPHER”, “SSL_CIPHER_USEKEYSIZE”、“SSL_CIPHER_ALGKEYSIZE”和“SSL_SERVER_A_KEY”

    另见

    http://httpd.apache.org/docs/2.0/mod/mod_ssl.html#envvars

    所以我真的怀疑你问错了问题,但在你回答这个问题之前,我无法判断什么是正确的问题:

    通过了解浏览器是否支持 128 位加密,您希望实现什么目标?

    C.

    【讨论】:

    • 我们的网站只支持128位或更高加密的浏览器。如果我们客户的浏览器不支持这种级别的加密,我需要发布一条消息,告诉他们去升级他们的浏览器。我认为最简单的做法是让客户点击帮助并查找密码强度。
    • 您可能想尝试将 https iframe 放入 http 页面并尝试检测它是否加载(可能通过在 iframe 中显示一些 javascript) - 但我怀疑大多数浏览器可能会将这些视为不同因此 origins 隔离了 2 帧。当然,从 http 页面对 https 页面的 Ajax 调用是行不通的。 Cookie 将在 http 和 https 之间传输,因此您可以尝试从 http 中删除 cookie,尝试在 https iframe 中检测它,然后使用会话在后续页面上处理结果。
    【解决方案3】:

    在 SSL 中,客户端连接并发送它支持的密码列表;然后服务器选择它也支持的密码之一,并且该密码用于连接。只有当连接建立(“握手”完成)时,HTTP 才会发挥作用。

    在您的设置中,这意味着您应该配置您的 SSL 服务器以接受各种密码,但优先使用具有 128 位或更多位私钥的密码。因此,只有当客户端和服务器都不支持 128 位或更多的密码时,才会选择小于 128 位的密码。然后,在该连接中发送的页面将被更改,具体取决于实际协商的密码。

    对于这样的设置,您需要能够执行以下操作:

    • 配置SSL服务器支持的密码列表;
    • 在客户端和服务器都支持的密码列表中强制执行服务器首选项而不是客户端首选项;
    • 从页面生成引擎中访问实际使用的密码,例如PHP。

    在 Apache 的 mod_ssl 中,似乎第 1 点很简单(“SSLCipherSuite”指令),“环境变量”部分似乎表明 SSL 服务器愿意提供一些关于选择什么密码的信息给页面生成引擎;特别是,SSL_CIPHER_USEKEYSIZE 变量看起来相当不错。因此第 3 点看起来也很简单。但是,我不确定这如何转化为 PHP 世界。

    对于第 2 点,它有点困难。 “SSLCipherSuite”的文档似乎告诉服务器,默认情况下,使用自己的偏好顺序,所以第 2 点也很容易,但这需要一些测试。

    现在只剩下一个小问题,就是3DES的状态。名义上,它使用 192 位密钥。任何体面的密码学家或程序员都会指出,在这 192 位中,仅使用了 168 位(额外的位应该用作奇偶校验位,但没有人费心验证这些位,它们只是被忽略了)。现在,一些学者也表明实际算法强度较低,在某种程度上相当于 112 位密钥,至少从正确的学术角度来看是这样。 NIST(处理此类标准的美国联邦机构)因此发布了一项建议,认为 3DES 应被视为提供“仅 112 位的安全性”,并且 112 低于 128。

    当然,112 位在技术上仍然遥遥无期(并且应该至少保持 30 年,即使技术进步保持其繁忙的步伐),所以这对任何人来说都不是真正的问题实际情况,但如果您处于标准疯狂的心态并希望强制执行“真实”128 位,那么这是一个需要考虑的问题。

    【讨论】:

      【解决方案4】:

      所有现代浏览器都支持 128 位。但是,您应该以管理方式强制执行此服务器端,因为有人可能使用较旧的浏览器或伪造请求以使用较低位级别的加密(例如 40 或 56)。

      我建议您询问如何设置网络服务器以根据您的平台强制执行它:

      http://serverfault.com

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-25
        • 2011-11-26
        • 2012-04-05
        • 2014-02-01
        • 1970-01-01
        • 2013-06-26
        相关资源
        最近更新 更多