如何禁用可疑的根证书

2015.01.27/2015.03.26发布于笔记暂无评论/目录

由于最近中间人攻击频发,为了保护个人信息安全,有必要清理一下我们的根证书列表。

相关新闻: 2015.03.24 月光博客: 谷歌称CNNIC发布中间人攻击证书[1]

根证书是干嘛的

水平有限,仅以一个粗糙的例子来介绍一下:

打开https://github.com,你会发现,浏览器的地址栏里会有一把绿色的锁和GitHub, Inc.(US),这表明你访问的网站是被认证的真实网站,而不是某人伪造的钓鱼网站。

浏览器是如何得知网站是否是伪造的?答案就是根证书。整个的验证流程大概有以下几步:

  1. 网站管理员从某个CA处花钱为自己的网站A购买一个电子证书。
  2. 网站管理员将证书安装在网站A的服务器上。
  3. 用户使用https协议访问网站A时,浏览器会通过自己或系统里的根证书验证网站A的电子证书。
  4. 如果验证通过,你就会在地址栏里看到那把绿色的小锁了。

以上的安全感源自一种叫做信任链的逻辑: 用户信任根证书,根证书信任给网站A颁发证书的CA,给网站A颁发证书的CA信任网站A,所以用户就信任网站A。

但是,如果根证书有问题怎么办?

凉拌

清理根证书

下面以某互联网信息中心发布的根证书为例,介绍在Ubuntu 14.04系统上禁用根证书的过程,涉及到的浏览器有Google Chrome和Mozilla Firefox。其他操作系统和浏览器的清理方法可参考月光博客的文章

不同的浏览器可能采用不同的策略来管理自己的根证书,以下分别说明。

清理Mozilla Firefox

Mozilla通过一个名叫Network Security Services(NSS)的项目来维护一个独立的根证书信任列表。而该项目在NSS 3.15(Firefox 23.0)之后将某信息中心的根证书加入了信任列表。[2][3]

Firefox的根证书列表可以通过界面查看并禁用

首选项 => 高级 => 证书 =>
查看证书 => 证书机构 =>
选中可疑的证书 =>
删除或不信任

实际测试Firefox 34.0发现,删除或不信任根证书并不会删掉选中的根证书,只是会取消对该证书的所有信任。

NSS的默认根证书列表保存在libnssckbi.so这个动态链接库中[4],这个很难手动修改。

如果想要查看NSS默认的根证书列表,可以如下操作[5]

# 首先找到libnssckbi.so的位置
sudo updatedb
locate libnssckbi.so

# 安装certutil
sudo apt-get install libnss3-tools

# 假设libnssckbi.so位于/usr/lib/x86_64-linux-gnu/nss/libnssckbi.so
cp -r /var/lib/nssdb nssdb
ln -s /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so nssdb
certutil -L -d sql:nssdb -h 'Builtin Object Token'

清理Google Chrome

按照Root Certificate Policy的说法,在Linux系统上,Chrome也使用Mozilla NSS提供的根证书。

可以通过Chrome的配置界面取消对可疑证书的信任

Settings => Show advanced settings =>
Manage certificates => Authorities =>
选中可疑的根证书 =>
Edit =>
取消所有的信任选项

对默认根证书列表的修改会保存在~/.pki/nssdb/目录下的sqlite数据库里,可通过certutil工具查看[6]

certutil -d sql:$HOME/.pki/nssdb -L 

清理操作系统

Debian和Ubuntu使用ca-certificates来管理系统的根证书,使用dpkg -L ca-certificates命令可以看到,大部分证书都是直接沿用了Mozilla的,所以必须要清理一下。

ca-certificates通过/etc/ca-certificates.conf文件来配置根证书。

sudo vi /etc/ca-certificates.conf

查找CNNICChina两个关键字,然后在所有可疑的证书前面加上一个!,或者直接删掉。

最后,更新系统的根证书

sudo update-ca-certificates

检查清理结果

在所有的浏览器里打开 https://cnnic.cn (必须是https协议),如果一切正常,说明清理失败。

清理后的负面影响

删除或禁用了上面提到的根证书后,受到影响的网站包括但不限于(以下信息可能已过时,实际情况请自行验证):

  • https://mail.163.com
  • https://www.battlenet.com.cn

阅读资料


  1. 伪证书应该是MCS Holdings公司的中级证书机构签发的,而这个机构的中级根证书是CNNIC签发的,呵呵。

  2. Mozilla Included CA Certificate List,引用于2015.01.27。

  3. Mozilla NSS:Versions,引用于2015.01.27。

  4. Introduction to Network Security Services,引用于2015.01.27。

  5. Where does Chrome gets its list of certificate authorities from?,引用于2015.01.27。

  6. Chromium wiki: LinuxCertManagement

#电子证书#系统安全#系统管理

评论