用命令行部分解决 CNNIC 证书问题
{ 撰文/fcicq }
下面写的,比现有大家正在应用的方法麻烦的多。有怕麻烦的请用各类图形版方法。 方法对 Firefox 3.6 & Chrome & Wget & cURL 有效。作者不用 Opera,有知道怎么办的可以冒泡。
0 删除系统原装证书
本部分只适合 Debian / Ubuntu。其他发行版可能不是这个文件,如有错请指正。
sudo rm /usr/share/ca-certificates/mozilla/Entrust.net_Secure_Server_CA.crt
注:如果 ca-certificates 包升级了,这个文件还会回来的,这个问题怎么办呢?
Debian / Ubuntu 还需要 dpkg-reconfigure ca-certificates 才算完事。其他发行版怎么做偶不知道。
原因是这样的,/etc/ssl/certs/ca-certificates.crt 是证书的集合。
检验成功的方法 (这是刚才被删的那个文件的有用部分第一行),无匹配为成功的标志。
grep "MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC" /etc/ssl/certs/ca-certificates.crt
1 装个包
# 发行版之间还不一样
# Debian / Ubuntu Users. fcicq loves sudo :D
sudo apt-get install libnss3-tools
# Fedora Users
su -c "yum install nss-tools"
# Arch Linux Users
sudo pacman -S nss
# Gentoo Users 还要加 USE
sudo sh -c "echo 'dev-libs/nss utils' >> /etc/portage/package.use"
sudo emerge dev-libs/nss
作者只在 Ubuntu 下做了测试,不保证其他系统安装一定正确。 完成后应该就能执行 certutil 了,不能的话请留言。
2 下载证书
下载 https://dl.dropbox.com/u/1356279/proxys/CNNIC.7z 并解压到 ~。事后会清理的,请放心 :D
# 别说你没 p7zip,没有的话自己解压
cd; wget https://dl.dropbox.com/u/1356279/proxys/CNNIC.7z
p7zip -d CNNIC.7z
3.1 Firefox 清理
先进入 Profile 目录
# 如果你的 Firefox 有多个 Profile,或者放别处去了,那自己想办法...
cd ~/.mozilla/firefox/*.default
原理是先试着修改原证书,再添加新证书。
# 有出错信息是正常现象
certutil -d . -M -t "" -n "CNNIC SSL" || certutil -d . -A -i ~/CNNIC/CNNICSSL.crt -n "CNNIC SSL" -t ""
certutil -d . -M -t "" -n "CNNIC ROOT" || certutil -d . -A -i ~/CNNIC/CNNICROOT.crt -n "CNNIC ROOT" -t ""
certutil -d . -M -t "" -n "Entrust.net Secure Server CA" || certutil -d . -A -i ~/CNNIC/Entrust.netSecureServerCertificationAuthority.crt -n "Entrust.net
Secure Server CA" -t ""
查看结果的方法
certutil -d . -L
3.2 Chrome 清理
用 Chrome 的同学可能注意到 LinuxCertManagement 了
# 出错都是正常的,不出错那是因为你执行了两遍
certutil -d sql:$HOME/.pki/nssdb -M -t "" -n "CNNIC SSL" || certutil -d sql:$HOME/.pki/nssdb -A -i ~/CNNIC/CNNICSSL.crt -n "CNNIC SSL" -t ""
certutil -d sql:$HOME/.pki/nssdb -M -t "" -n "CNNIC ROOT" || certutil -d sql:$HOME/.pki/nssdb -A -i ~/CNNIC/CNNICROOT.crt -n "CNNIC ROOT" -t ""
certutil -d sql:$HOME/.pki/nssdb -M -t "" -n "Entrust.net Secure Server CA" || certutil -d sql:$HOME/.pki/nssdb -A -i
~/CNNIC/Entrust.netSecureServerCertificationAuthority.crt -n "Entrust.net Secure Server CA" -t ""
查看结果的方法
certutil -d sql:$HOME/.pki/nssdb -L
4 测试
https://tns-fsverify.cnnic.cn/
https://www.enum.cn/
5 清理现场
# 除非你就是里面的人,否则不会有这种目录名的,对吧,有文件删错概不负责。
rm ~/CNNIC.7z; rm -r ~/CNNIC
6 命令参考
7 后记
偶没有用删除证书的方法,只是让证书失去了验证的能力。不喜欢的可以自己改一改,命令参考在上面。
事实上最大的问题是 Entrust.net 信任 CNNIC 了。某些人说不升级浏览器就能防御,那就是个笑话。
Arora 这个浏览器很有意思,可是偶对它的免疫操作失败了。有人知道怎么做吗?
以下和 Linux 无关。
另外,Windows Server Administration Pack 里面有 certutil.exe,有条件的可以试试做一个免疫工具出来。 Win32 下也有 Mozilla 版 certutil.exe(可能需要自己编译),这两个程序在名字上要打架了。
{ Thanks fcicq. }
Read More:
标题应该写清楚。这个是解决cnnic证书被firefox3.6,ie等包含的问题。
老外把cnnic包含进去,是不了解国情啊。
懒人方法:用 iptables 禁止访问 entrust.net cnnic.cn,或在 /etc/hosts 中添加记录指向不可路由不存在的地址。
有谁能举出一个使用CA证书后,发生了安全问题的例子?不过以讹传讹、道听途说而已。证书与流氓软件根本车不上关系。至于说监控,这是任一个政府都做得,而且很多政府不止监控本国,例如“梯队“、”黑屋“等,这里很少看到关于外国互联网监控对中国国家、企业、个人安全的讨论。
如果你不能屏蔽政府提供的一切基础设施,消除政府对任何相关机构的影响,这样做没有任何意义,监控总是能做到的,关键在于实施的决心、法律的制约、商业的驱使、民众反对和支持的力量对比。
我很怀疑做这有什么意思, 现在怎么都炒作这个事。真想监控你根本没办法,问题是你有什么值得监控的?
arch是不是还没有这个证书?
@闲人 人总要生病,疫苗不能预防所有的病,所以打了也没有任何意义,你会得其它的病
@闲人: 人都是要死的,所以想要活着这种想法就没有意义么?
@聚焦深空:
验证证书不需要访问这两个域名的.证书和厂商的域名没关系.
明显的要被杀掉的时候都不会叫几声的小乳猪
@dkeehl CNNIC的CA好歹是通过了Ms,Google和Mozilla的认证的,CNNIC名声不好还不就是以前借壳搞的那个中文上网犯了众怒,除了这个好像也没什么吧,你这种说法和男人长了JJ就是强奸犯有什么区别
@kpt 你也别讥笑别人,要是他是杀掉的时候都不会叫几声的小乳猪,你也好不多哪儿去,顶多被杀时后能多吼几声,指不定到最后肉还是被鼓动你吼的人给吃了。
@kpt: 也别讥笑别人了,他要是杀掉的时候都不会叫几声的小乳猪,你吼几声又有什么用呢?说不定最后分肉的倒是鼓动你去吼的人。
@G.S.Alex 多谢指正!一直错误以为客户端默认直接从 CA 获得服务器证书。启用 OCSP 时,客户端必须与 CA 通讯,前面阻止通讯方法才有效。
貌似理解错 OCSP,还是不偷懒了。
arch 下删掉了/usr/share/ca-certificates/mozilla/Entrust.netSecureServer_CA.crt以后需要运行 sudo /usr/sbin/update-ca-certificates
我记得国安就做过这种坏事,伪装崔卫平的电子邮件发信,诱捕所谓嫌疑人
简直是莫名其妙,这里还算是IT网站吗?
hmm... 光说技术上的事情应该不会有问题 ...
不愿折腾的请无视 ... 鸡蛋番茄向我丢来吧, 偶接着 ...
另谢谢 @xiooli 同学补充.
笑话,这也算技术。
证书怎么个用都还不明白吧,不过不要紧,反正反G就是政治正确,所以不管三七二十一先使证书失效也就成了技术了?
To kpt 能举出例子才算有理,对子虚乌有的事情乱叫的,只能算疯猪。有本事,就把身份证也屏蔽了吧!
第0部分,删除证书后,在Linux的chromium中对https://tns-fsverify.cnnic.cn/是无效的,但是对https://www.enum.cn/有效。
3.2部分,对chromium完全无效,两者皆可访问。若不添加Entrust.net Secure Server CA,就完全有效了。
此外,在Gentoo中certutil的名字是nsscertutil。测试环境:Gentoo,chromium 5.0.308.0 (37385)。
上面的测试有误,操作后需要重启浏览器,并且一段时间后才能完全生效。
nsscertutil 这个事情在 LinuxCertManagement 那篇说明里有。偶疏忽了。 最好先复制到文本编辑器,关闭浏览器再操作。
偶也在奇怪某些浏览器无法屏蔽 tns-fsverify.cnnic.cn 的问题,这是已知问题...
知识就是力量 ALL FOR FREE
"真想监控你没办法"可以商榷.技术上办法总是有的,肉身监控不在讨论范围之内.
做不到100%的安全,做到99%也可以啊,至少可以淘汰掉国安局黑客中的草包,让有能力的人脱颖而出.也算是一种变相的爱国,呵呵.
opera用户打开上面提到的网站后,在首选项,高级,安全性,证书,第二个标签里面可以看到cnnic,双击,取消选中允许访问就ok了。
Opera的方法,前几天OC论坛上刚讨论过
蛋疼 装B
要保持 ca-certificates 不更新,在debian里面可以把这个包hold
dpkg --get-selections >t
编辑t 文件,把 ca-certificates 那一行后面的install 改成hold 然后执行
dpkg --set-selections <t
dpkg --get-selections >t sed -i '/ca-certificates/ s/install/hold/' t dpkg --set-selections <t
windows版本的Mozilla NSS的certutil.exe ,貌似是无法从cert8.db/key3.db中列出或者删除CNNIC ROOT证书的。所以我在制作 https://code.google.com/p/nocnnic/ 项目的时候目前只使用了制作新的(带有标记BuiltIn Token CNNIC根证书为不可信)cert8.db/key3.db证书库并且覆盖默认证书。当然这有缺点,我想未来会继续解决之。
一个证书信任的问题不至于搞这么麻烦嘛,唯一的区别是cnnic签发的证书在下载的时候firefox不会提示不信任而已,和大家所担心的安全问题完全是相干,何必呢。
上面少了一个“不”字,“不相干”
这种事其实对普通人的影响并不大, 之所以采取措施,因为这反映了态度、原则和容忍底线。 否则等到spy手段多到你受不了的时候再行动也来不及了……
to kcome: 1 确实 Mozilla 不再提供新版的编译好的 certutil.exe。最好用新版的,不要用 3.11.4 或者更早的。 2 偶后面关于 win32 的叙述可能有误。请找一下 codesignx86.exe 并提取里面的文件试试看。
更正一下,是 codesigningx86.exe。http://arantius.info/downloads/codesigningx86.exe 是一个下载地址。
@fcicq 我用的是自己编译的certutil.exe (nss),但是不能操作cert8.db+key3.db,因为builtin token实际上已经是在nss3.dll中了。那么我想,其实可以用先注释掉cnnic root ca cert然后再自编译nss3.dll的办法解决:)
@kcome send a mail to fcicq at fcicq dot net.