各位,虽然此事与 AutoProxy 无关,但它对所有(也包括 AutoProxy)用户都是一个非常严重的安全威胁。我,WCM,AutoProxy 作者,以个人名誉强烈建议您认真阅读并采取措施。
背景知识
网上传输的任何信息都有可能被恶意截获。尽管如此,我们仍然在网上保存着很多重要的资料,比如私人邮件、银行交易。这是因为,有一个叫着 SSL/TLS/HTTPS 的东西在保障我们的信息安全,它将我们和网站服务器的通信加密起来。
如果网站觉得它的用户资料很敏感,打算使用 SSL/TLS/HTTPS 加密,必须先向有 CA (Certificate Authority) 权限的公司/组织申请一个证书。有 CA 权限的公司/组织都是经过全球审核,值得信赖的。
发生了什么事
最近,CNNIC——对,就是那个臭名昭著的利用系统漏洞发布流氓软件的、就是那个使劲忽悠 CN 域名又突然停止域名解析的 CNNIC (中国互联网络信息中心),它——偷偷地获得了 CA 权限!在所有中文用户被隐瞒的情况下!
意味着什么
意味着 CNNIC 可以随意造一个假的证书给任何网站,替换网站真正的证书,从而盗取我们的任何资料!
这就是传说中的 SSL MITM 攻击。以前这个攻击不重要是因为攻击的证书是假的,浏览器会告诉我们真相;现在,因为 CNNIC 有了 CA 权限,浏览器对它的证书完全信任,不会给我们任何警告,即使是造假的证书!
你信任 CNNIC (中国互联网络信息中心) 吗?你相信它有了权限,会安守本分,不会偷偷地干坏事吗?
我对此有3个疑问:
- 某 party 对 GMail 兴趣浓厚,GFW 苦练 SSL 内功多年,无大进展。如今有了 CA,若 GFW 令下,CNNIC 敢不从否?
- CNNIC 当年利用所谓官方头衔,制流氓软件祸害网民。如今有了 CA,如何相信它不会故伎重演?
- 为了得到指定网站的合法证书,其它流氓公司抛出钱权交易,面对诱惑,CNNIC 是否有足够的职业操守?
影响范围
基本上所有浏览器的所有用户均受影响!
行动第一步:立即安全防御
在此只介绍 Firefox 浏览器的防御方法,其它浏览器的用户请自行 Google,原理类似。
- 菜单栏:工具/编辑->首选项->高级->加密->查看证书->证书机构(Authorites)
- 这是一个很长的列表,按照字母顺序,你应该能找到一个叫着 "CNNIC ROOT" 的记录,就是这个东西,告诉 Firefox,我们不信任它!
- 选中 CNNIC ROOT,点击下面的“编辑”按钮,弹出一个框,应该有3个选项,把所有选项的勾都去掉!保存。
- 还没有完,狡兔有三窟。
- 接着往下找,有一个叫着 Entrust.net 的组,这个组里应该有一个 "CNNIC SSL" (如果没有,访问一下 这个网站 就有了)
- 别急着下手,这回情况不一样,这个证书是 Entrust 签名的。我们信任 Entrust,Entrust 说它信任
CNNIC,所以我们就被迫信任 CNNIC SSL 了。找到 "Entrust.net Secure Server Certification
Authority" 这一条,同上面一样,把3个选项的勾都去掉,保存(提示:取消了对 Entrust
的信任以后,可能会没法打开它签名的某些正常网站。至于哪个网站用了它的签名,随便试了一下,没找到例子)。 - 最后,让我们验证一下。重启 Firefox,打开 这个 和 这个 网站,如果Firefox 对这两个网站都给出了安全警告,而非正常浏览,恭喜,您已经摆脱了 CNNIC CA 的安全威胁!
行动第二步:治标还需治本
几天前听到这个消息的时候,我简单地、轻蔑地将 CNNIC
删除了事。可是这个周末,我忽然觉得这样很不好。因为只要它存在,始终会有大部分的用户受到威胁。和写 AutoProxy
时同样的想法:如果大部分人都处于安全威胁当中,一个人苟且偷安又有什么意义?如果不能将自由与安全的门槛降低一点点,所谓的技术又有什么好侥幸的?
所以我呼吁大家,贡献一点时间和知识,团结起来说服各浏览器取消 CNNIC 的 CA 权限。这种事不可能有公司来推动,只有我们社区。
首先推荐的是 Firefox,作为一个公益组织 Mozilla 的决策过程更为开放、更愿意听取社区的声音。Bug 476766 记录了事件的全过程。Bug 542689 和 Mozilla.dev.security.policy
进行着现在的讨论(注意,你可以把自己添加到 Bugzilla 的 CC List
以表达你对此事的关切。但是不要随便说一些不靠谱的话,免遭讨厌。强调政治、GFW
的之类的不管用,必须就事论事。比如它在申请过程中采取欺骗、隐瞒的手段,或者申请成功后的某些行为违反了 Mozilla 的 CA
政策;比如它的属性和过往行为表明它不会忠于自己的职责,而(帮助)做出 MITM 这种 CA 共愤的事情)。
其次是 Entrust,它说它信任,导致了我们也被迫信任 CNNIC SSL。不妨 告诉 Entrust 此事很严重,
因为它错误地信任了 CNNIC,大量用户不得不删除它的 CA。如果能找到使用 Entrust
证书的网站更好。给这些网站写信,因为此次事件我们不得不删除了 Entrust 的 CA,请求他们另选别家认证。如果反响强烈,势必给
Entrust 造成很大压力。
除此之外,来投个票吧(结果统计)!
最后,强烈建议大家,发现证书警告的时候最好直接关掉,不要轻易添加例外。证书的信任体系是一级依赖一级的,一不小心你可能就会连带信任一个不想信
任的 CA。上面用于验证的两个网站,不妨定期(每周/每月)测一测,如果哪天你发现其中的任何一个网站没有证书警告,就要注意了!
1、如果没有安装Firefox浏览器,可以从这里下载这三个证书,然后跳到第5步:CNNICROOT.crt CNNICSSL.crt Entrust.netSecureServerCertificationAuthority.crt
2、打开Firefox浏览器,工具(Tools)->选项(Options)->高级(Advanced)->Encryption->View Certificates
3、在Authorites标签页中找到”CNNIC“组的”CNNIC ROOT“项,按“Export”导出,然后删除。
4、在”Entrust.net“组中找到”Entrust.net Secure Server Certification Authority“和”CNNIC SSL“证书,同样导出并删除。
5、打开开始菜单->运行(或者直接按Win-R)
6、输入certmgr.msc,打开Windows的证书管理器。
7、展开”Untrusted Certificates”,右键单击其下”Certificates“项,在”All Tasks“子菜单下单击”Import…“
8、分别找到刚才保存的三个证书,依次导入(Next->Browse…(找到相应文件)->Next->Next->Finish)。
十分感谢推友 @Ratoo 和 @jimmy_xu_wrk 在这个问题上对我的帮助:)
在Twitter上惊闻“微软把CNNIC列为根证书发布者”,赶紧Google一把,发现Mozilla同样也已经在3.6版的Firefox里这么做了。
出于对CNNIC深深的不信任,我决定将CNNIC ROOT从“受信任”的列表里赶出去。
因为IE/Chrome采用微软的CA目录,而微软现在暂未将CNNIC加入,因此需要先从Firefox中导出这几个证书,再添加到Windows的“不信任”列表(更新:现在可以直接从Windows里导入再导入了,操作类似),以防范于未然。下面便是具体的步骤了(包括IE/Chrome/Firefox):
1、如果没有安装Firefox浏览器的3.6最新版,或者在下面的操作中没有找到相应的证书,可以从这里下载这三个证书,然后跳到第5步(其中CNNIC SSL非自带证书!):CNNICROOT.crt CNNICSSL.crt Entrust.netSecureServerCertificationAuthority.crt
2、打开Firefox浏览器,工具(Tools)->选项(Options)->高级(Advanced)->加密(Encryption)->查看证书(View Certificates)

3、在证书机构(Authorites)标签页中找到”CNNIC“组的”CNNIC ROOT“项,按导出(Export)(备份到本地),然后编辑(Edit),去除里面的三个勾选,然后单击确定(OK)。(RT JimmyXu:在Firefox里对自带根证书执行“删除”操作就相当于是禁用其所有目的,并不会将其删除。)

4、在”Entrust.net“组中找到”Entrust.net Secure Server Certification Authority“(序列号37:4A
2:43的)和”CNNIC SSL“证书,同样导出并去除勾选。(注:Entrust.net这个也是验证CNNIC所用的证书)

5、打开开始菜单->运行(或者直接按Win-R)
6、输入certmgr.msc,打开Windows的证书管理器。
7、展开”不受信任的证书(Untrusted Certificates)“,右键单击其下”证书(Certificates)“项,在”所有任务(All Tasks)“子菜单下单击”导入(Import)…“

8、分别找到刚才保存的三个证书,依次导入(Next->Browse…(找到相应文件)->Next->Next->Finish)。
9、将导入的证书复制(Ctrl-C),然后粘贴(Ctrl-V)到受信任根证书颁发机构(Trusted Root Certification Authorities)中,然后在这个窗口中分别右键单击粘贴过来的3个证书,选择“属性(Properties)”,然后单击“停用这个证书的所有目的(Disable all purposes for this certificate)”。
(感谢 Jimmy Xu 供图)
另附上网友补充的Safari/Opera设置方法:
Mac下Safari操作步骤(感谢推友 @xzzxyd 提供!):
应用程序(Applications)/实用工具(Utilities)/ 找到里面的 钥匙串访问(Keychain Access.app),或者在Spotlight中搜索”Keychain Access“或”钥匙串访问“,打开后搜索CNNIC,在”信任”中标记为”永不信任“~。


VPN代理服务器:都没人提Opera的吗?Ctrl+F12 -安全性-管理证书-证书办法机构-CNNIC ROOT 双击,把 允许连接到使用该证书链接的网站 去掉。
想检验操作是否成功?在浏览器里访问 https://www.enum.cn/ ,如果提示证书被拒绝,就证明操作成功了!




——————1/29 6:30 PM更新——————
经验证,CNNIC SSL证书非Firefox 3.6自带,没有找到属正常情况;另外,上述步骤3/4有变化,已删除证书 CNNIC SSL 发现无效的朋友,可以将 CNNIC SSL 证书按照上述3/4步的步骤重新操作一次,而非删除,即可。
——————1/27 7:30 PM更新——————
不需要关闭自动更新,上述步骤多了第9步,请注意!
——————1/27 6:15 PM更新!!——————
0、在默认情况下,微软会自动连接到Windows Update服务器更新CA列表,这样会导致以下操作对IE/chrome失效,具体解决方法:
0a:
对于Windows XP用户:控制面板(Control Panel)->添加/删除程序(Add/Remove
Programs)->添加/删除windows组件(Add/Remove
Windows Components)->取消勾选“更新根目录证书(Update Root Certificates)”
(感谢推友@tOmMyanG供图!)
0b:
对于Windows Vista/Windows 7用户:组策略(运行->gpedit.msc)->计算机配置(Computer
Configuration)->管理模板(Administrative
Templates)->系统(System)->Internet 通信管理(Internet Communication
Management)->Internet 通信设置(Internet Communication
settings),启用(Enable)“关闭自动根证书更新(Turn off Automatic Root Certificates
Update)”

十分感谢推友 @Ratoo 和 @jimmy_xu_wrk 在这个问题上对我的帮助:)
(另:十分感谢使用中文版系统的朋友告诉我相应选项在中文版中的名字,谢谢!)
参考资料:http://www.networkworld.com/community/node/17703