CNNIC 证书的危害及各种清除方法

2010-02-16IT IT.信息安全

  前几天已经写了2个帖子(分别是扫盲数字证书的基本知识CNNIC 干过的那些破事)作铺垫,终于开始来说正题——关于 CNNIC 的 CA 证书。


★CNNIC到底干了啥事?


  从前面的帖子,大伙应该都看出来,CNNIC 这个老流氓可是坏事做尽啊。最近这段时间,CNNIC 不甘寂寞,又在 CA 领域,搞了点小动作。今天先来说一下,这个老流氓又坑蒙拐骗了哪些主?

◇Mozilla.org


  可能某些IT圈外的同学会问,Mozilla是嘛玩意?简单地说,“Mozilla 和 Firefox 的关系”就好比“微软和 Windows 的关系”。因此,Firefox 自带哪些 CA 根证书,是由 Mozilla 组织决定滴。
  话说2009年初那会儿,CNNIC 里面的某个员工(liu_yan@cinic.cn)到 Mozilla 网站提交了一个申请:要求将 CNNIC 加入 Mozilla 的 CA 列表。此申请经过几个月的讨论。到了2009年底,审批获得通过。至此,CNNIC 正式成为 Mozilla 的 CA 之一(请看“Mozilla官方的CA列表”)。懂洋文的同学,请自行到“这里”看详细的申请过程。
  因此,从 Firefox 的3.6版本开始,其内置的诸多根证书中,将会包含 CNNIC 这个老流氓提供的根证书。

◇微软(Microsoft)


  说实在的,俺不清楚老流氓 CNNIC 是如何忽悠微软,让微软把它也加入到 Windows 内置的 CA 列表中的。不过这已经不重要了。现在,老流氓已经把它脏兮兮的触角,伸到了微软那儿。列位看官如若不信,可以去看“微软的 CA 列表”。
  今后,如果你安装了微软新的操作系统,多半其已经包含了 CNNIC 的根证书;即便你一直使用老版本的 Windows,也可能在自动升级了某个 Windows 补丁之后,把 CNNIC 的根证书带到你的电脑中。

◇Entrust.net


  除了 Mozilla 和微软,还有一个组织也被 CNNIC 牵连了,那就是 Entrust ——国外一家比较老牌的 CA。正是由于该 CA 比较老牌,因此 Windows 系统(至少包括 Win2000 之后的版本)中以及 Firefox 中,都已经内置了它的根证书。
  老流氓大概是花了些银子,于是该CA提供的根证书就信任了 CNNIC 制作的某个 SSL 证书(不明白证书间是如何信任的,请回顾一下俺扫盲帖中提到的“证书信任链”)。
  到了2010年下半年,Entrust 大概也意识到 CNNIC 的名声太臭,就解除了跟 CNNIC 的信任关系。所以,如今【新的】Entrust 证书,已经不再信任 CNNIC 的 SSL 证书了。如果你的浏览器是新版本或者 Windows 系统更新过新的补丁,其内置的 Entrust 证书应该是安全的,不用清理了。如果你吃不准 Windows 系统或浏览器内置的 Entrust 证书是否安全,请根据本文后续章节“★如何确认门户已经清理干净”介绍的方法判断。


★这事儿对咱有啥影响?


  那电脑中有了 CNNIC 的证书,会出现啥鸟事捏?俺大概说一下。

◇“中间人攻击”的风险


  所谓的“中间人攻击”,洋文叫做“Man-In-The-Middle attack”,按首字母缩写成 MITM。
  在证书导致的各种风险里面,“中间人攻击”的风险,是【最大】的(没有之一),也是最经常被提及滴。
  俺在前面的帖子已经讲了 CA 证书对于 HTTPS 协议的重要性(可以防止攻击者伪造虚假网站)。既然老流氓 CNNIC 已经成为合法的 CA,那它就能堂而皇之地制作并发布 CA 证书。然后捏,再配合 GFW 进行【域名污染】。那 GFW 就可以轻松搞定任何网站的 HTTPS 加密传输。
  (如果你不清楚“域名污染”是咋回事儿,可以看俺的扫盲教程——《扫盲 DNS 原理,兼谈“域名劫持”和“域名欺骗/域名污染”》)
  可能有些小朋友心里会犯嘀咕:GFW 会有这么坏吗?俺想篡改鲁迅他老人家的一句话来回答:俺向来是不惮以最坏的恶意,来推测党国。GFW 和 CNNIC 作为党国的2条走狗,一起进行中间人攻击(一个负责在 DNS 上做手脚、另一个负责伪造 CA 证书),简直是“天生一对、黄金搭档”啊!

◇ActiveX 控件的风险


  另外一个大伙儿不太关注的风险,是关于 ActiveX 控件的问题。前几年,很多恶意软件(包括流氓软件、木马)都是通过 IE 控件的技术,安装到大伙儿的电脑上。后来微软加强了对 ActiveX 控件的验证:在 IE 的默认设置下,对于【没有】数字签名的 ActiveX 控件,默认是拒绝安装滴;而对于有数字签名的控件,则会给出提示。
  因此,老流氓 CNNIC 可以很轻松地给自己的 ActiveX 控件制作数字证书。然后把控件放到网上。某些粗心的电脑用户看到IE跳出的安装控件提示,多半没细看,直接就点了“确定”按钮。


★如何清理门户?


  其实网上关于如何去掉证书的操作指南,多如牛毛,所以俺就简单说一下,懒得再抓图了。
  有些浏览器(IE、Chrome、Safari)使用的是操作系统的证书体系。这种情况下,你需要把 CNNIC 证书从操作系统的证书体系中去掉;还有些浏览器(比如:Firefox、Opera)是自己带了一套证书体系。你要进入该浏览器的配置界面,把不要的证书去除即可。
  下面分不同的浏览器,不同的操作系统,分别介绍:

◇清理 Windows 的证书(适用IE、Chrome、Safari)


  对于使用 Windows 下的 IE 或 Chrome 或 Safari 浏览器,则需要执行如下步骤:
1. 运行 Windows 的证书管理器(到命令行执行certmgr.msc)。
2. 选中“受信任的根证书颁发机构”=>“证书”。
3. 查看右边的证书列表。如果里面已经有 CNNIC 的证书,直接跳到第7步。
4. 先翻墙到“这个页面”下载现成的 CNNIC 证书。要把证书从 7z 压缩包中解压出来(补充说明:“Google Code 网站”已在2016年1月关闭,此下载页面已【失效】)。
5. 鼠标在“受信任的根证书颁发机构”=>“证书”上点右键。在右键菜单中点“所有任务”=>“导入”。
6. 出现一个导入向导,根据先导一步步的提示,把上述 CNNIC 证书导入到证书列表中。
7. 选中 CNNIC 证书,点右键。在右键菜单中点“属性”。
8. 在跳出的属性对话框中,选中“停用这个证书的所有目的”,然后确定。
9. 最后,为了保险起见,再把这三个证书,导入到“不信任的证书”中(方法和上述类似)。

  (注:上述操作仅对当前用户生效。如果你的 Windows 系统中有多个常用的用户帐号,要对每一个用户进行上述设置)

◇清理苹果 Mac OS X 的证书(适用于 Safari、Chrome)


  对于使用 Mac OS X 下的 Safari 或 Chrome 浏览器,则需要执行如下步骤:
请到“实用工具”=>“钥匙串访问”=>“系统根证书”=>“证书”,找到 CNNIC 的证书并双击,改为“永不信任”。

  (注:如果你的界面是洋文,其操作方式也八九不离十。俺就不再啰嗦了)

◇清理 Linux 的证书(适用于 Chrome、Safari)


  对于 Debian 或 Ubuntu 系统,以管理员权限进行如下操作:
  方法1
  运行命令:dpkg-reconfigure ca-certificates 会出现一个图形界面,把 CNNIC 证书【不勾选】,并确认。
  方法2
  编辑 /etc/ca-certificates.conf 文件,把 CNNIC 证书对应的行删除或注释掉。然后用命令 update-ca-certificates 使之生效。

  (注:对于其它 Linux 发行版本,也有类似操作,俺就不再啰嗦了)

◇清理 Firefox 的证书


  不论是在哪个操作系统下,只要你用的是 Firefox 浏览器(它的证书体系独立于操作系统的),则需要执行如下步骤:
1. 从菜单“工具”=>“选项” ,打开选项对话框
2. 切换到“高级”部分,选中“加密”标签页,点“查看证书”按钮。
3. 在证书对话框中,切换到“证书机构”。
4. 里面的证书列表是按字母排序的。把 CNNIC 打头的都删除。

  (注:如果某个证书是 Firefox 自带的,则删除之后,下次再打开该对话框,此证书还在。不过不要紧,它的所有“信任设置”,都已经被清空了。

◇清理 Opera 的证书


  不论是在哪个操作系统下,只要你用的是 Opera 浏览器(它的证书体系独立于操作系统的),则需要执行如下步骤:
1. 从菜单“工具”=>“首选项” ,打开首选项对话框
2. 切换到“高级”标签页,在左边选择“安全性”这项。
3. 点“管理证书”按钮,出来一个证书的对话框。切换到“证书颁发机构”标签页。
4. 找到 CNNIC 的证书并选中,点“查看”按钮,在证书属性对话框中,把“允许连接到使用此证书的网站”的打勾去掉
  (注:俺是基于 Opera 10.10 进行操作。新版本的界面可能略有差异)


★如何确认门户已经清理干净?



  【补充说明】
  本文发出之后,过了5年,包括微软、Google、苹果在内的几大操作系统和浏览器厂商开始把 CNNIC 的根证书从默认的信任列表中清除。从那之后,连 CNNIC 自己的官网也不得不使用国外的证书。所以,本小节的下述内容就作废了(俺标注了删除线)。


  为了保险起见,在完成上述的清除工作之后,你需要用浏览器访问一下老流氓的一个网站,地址是 https://www.cnnic.cn (记得用 HTTPS 协议哦)
  如果你的浏览器报告该网站的证书有问题,那恭喜你,你的门户清理干净了 :-)
  如果该网站的页面顺利打开,那你就要重新检查一下,看上述操作是否出了差错。



★可能的副作用


  有些国内网站已经开始使用 CNNIC 的证书,目前已经知道的有163邮箱(真鄙视网易)。但是甭担心。去除证书后,浏览器在访问上述网站时,会给出一个证书的安全警告。你只需添加一个安全例外即可。


★引申阅读


  另外列举一些相关的资料给大伙儿参考:
最最最严重安全警告
(此文是 AutoProxy 的作者 WCM 亲自写的。09年就已经在网上广为流传)

CNNIC 我不信任你——从受信任的根证书里赶走 CNNIC
(这篇文章也被多处转贴)

noCNNIC
(已经有热心网友在 Google Code 平台上搞了一个自动清除工具。补充说明:“Google Code 网站”已在2016年1月关闭,此项目已【失效】)


俺博客上,和本文相关的帖子(需翻墙)
数字证书及 CA 的扫盲介绍
CNNIC 干过的那些破事儿
老流氓 CNNIC 的接班人——聊聊“沃通/WoSign”的那些破事儿
扫盲 DNS 原理,兼谈“域名劫持”和“域名欺骗/域名污染”
扫盲 HTTPS 和 SSL/TLS 协议》(系列)