12306之根证书

来源:互联网 发布:淘宝宝贝橱窗推荐 编辑:程序博客网 时间:2024/05/01 03:03

本文想简单谈谈那个所谓的根证书。在访问铁道部网上售票官网 www.12306.cn后,有一个醒目的提示,为保证顺畅购票,需要下载安装根证书。那么什么是根证书?为什么买火车票的时候需要下载和安装,在淘宝等在线交易网站购物时候为什么就不需要这样做?

人民群众可以通过互联网购买火车票。虽然说在线买的难度不比以往排队购买低多少,但这总算是一次值得鼓励的尝试。不过在线购票系统一经推出,在技术上就已经被人批得体无完肤。


为了确保安全,很多涉及在线交易的网站,例如网上银行、购物网站等,都会使用SSL技术对页面内容进行加密。SSL技术在这里的主要用途有两个: 
1.
确保网站服务器和用户浏览器之间的通讯不被窃听:这一点很好理解。SSL属于一种公钥加密体系,简单来说,一个SSL证书分为两部分:公钥和私钥。其中私钥会被网站所有者妥善保管,并在服务器端用私钥将网络通讯全部加密;而公钥会在网上广为传播,一个私钥加密后的数据只有用所对应的公钥才能解谜。因此只要SSL证书本身可以保证安全,那么在访问网站的时候就可以保证网络通讯不被他人所窃取,并且如果有人进行中间人攻击,因为没有相应的私钥,因此浏览器这端可以及时察觉。

2.确保网站所宣称的身份真实可靠:这一点也不难理解。网上有个网站叫做支付宝,可如何保证这个网站就是那个真正的支付宝,而不是其他人伪造的钓鱼网站?因此真正的支付宝可以使用SSL证书,这种针对企业用的证书的申请手续比较繁琐,有一大堆审查流程,需要提交大量相关的证明文件,因此可以保证只有真正的某公司才能以这个公司的名义申请证书,只要申请到证书,就可以确信身份的可靠。此外近些年还有一种更可靠的EVSSL证书。

试试看访问“https://www.alipay.com”这个域名,随后可以看到,在浏览器的地址栏,“Http”协议后面出现了“s”这个字母,并且IE地址栏的右侧显示了一个锁头图标,因此证明该网站是SSL加密的。点击这个锁头图标后,还可以看到网站所用证书的相关信息。


加密功能基本上没什么需要解释的,因此下文的重点将放在身份可靠性这块。在上图所示界面上点击查看证书链接,随后可以看到该网站SSL证书的详情:



在这里一个很通用的规则是:如果浏览器检测到加密网站所用的证书是正常的,那么地址栏就会显示为绿色(使用EVSSL证书)或者白色(使用普通SSL证书),这种情况下可以放心地浏览该网站,并提交自己的数据;如果浏览器检测到网站的证书有问题,那么地址栏就会显示为红色,提醒我们注意,同时取决于具体情况,地址栏右侧会显示有证书错误按钮,而且网站内容不会显示,取而代之的是浏览器的警告信息。基本上主流浏览器的最新版本都已经具备这样的功能。

这个过程的基本原理是:假设我们信任A公司,而A公司信任B公司,那么我们就可以信任B公司。很明显,“www.alipay.com”的证书是“VeriSign Class 3 International Server CA – G3”颁发的,这表示后者信任前者,可以证明前者的真实身份,但是我们又凭什么信任后者这个证书颁发机构?

上述文字里不止一次提到信任一词,那么信任在这里是什么意思?是否像我们平时讲话时说的我信任他那样,代表我们相信他是个好人,不会干坏事?其实完全不是这样。这里所说的信任,只是说明证书持有人的身份是真实可靠的,至于持有人用这个证书干什么事情,不在信任的范畴内。例如,网上很多臭名昭着的恶意软件,现在都带有数字证书(倒是很多正规用途的软件因为开发商缺乏安全观念不带证书),同时因为这些数字证书的都是我们信任的根证书颁发机构,因此,操作系统

和浏览器是信任这些公司的身份的,但并不代表这些公司的软件不会干坏事。只要肯花钱,任何人都可以在商业性质的证书颁发机构买到直接被我们的系统所信任的证书。 
其实Windows和任何操作系统本身就包含一些受信任证书颁发机构的根证书,要查看这些根证书,可以运行“certmgr.msc”打开证书控制台,然后从控制台窗口左侧的控制台树中依次进入“证书-当前用户”→“受信任的根证书颁发机构”→“证书”,随后右侧的窗口中会显示本机预置的所有根证书颁发机构,其中就有“CA – G3”,这表示我们信任“CA – G3”,而“CA – G3”信任“www.alipay.com”,因此我们可以信任“www.alipay.com”。如果从证书控制台中删除“CA – G3”的根证书,表示我们不再信任它,那么它所信任的公司也将不再被我们信任。


这里要重点提出根证书这个概念,全世界具有提供数字证书业务的公司有很多,而Windows自带的根证书很少,默认情况下,我们是如何信任这么多不同公司颁发的不同证书的?其实这就是这个字的含义,因为可以颁发证书的公司虽然很多,但最基本的根证书颁发机构只有有限的几个,默认情况下都是被操作系统所信任的。那么既然操作系统能信任根证书颁发机构,自然也就可以信任被根证书颁发机构信任的公司,进而可以信任被这些公司所信任的下一级公司。

如何证明这一点?可以单击上图中的查看证书链接,随后打开证书对话框,切换到证书路径选项卡后,可以看到下图所示界面。从该图中可以看出,整个证书信任链的路径分为三个层次,最顶层的是我们信任的根证书颁发机构,该机构给“InternationalServer CA – G3”颁发了证书,因此,我们信任“CA-G3”;随后“CA-G3”又给“www.alipay.com”颁发了证书,因此也可以信任“www.alipay.com”。如果“www.alipay.com”再给别人颁发证书,那么这个人的身份依然可以被我们信任。

当我们查看12306.cn这个网站的证书信息时就会发现,这个证书根本没有一个有效的受信任CA,完全是自己给自己发着玩的。



很遗憾的是,这种做法虽然很不安全,可国内的大佬们很喜欢使用。例如在我的系统中,这里就有建行和工行网银自行添加的根证书。

那么这种做法除了能省几个钱之外,对用户来说有什么危害?

12306.cn订票的很多人可能会看到过该站点安全证书的吊销信息不可用,是否继续这样的信息。这是什么意思?

还是以上文那个DigiNotar的例子来说,假设某个大型CA被攻击,私钥被窃取,这时候有两种方法尽量避免

1.类似Windows补丁这样,由软件厂商通过发布更新的方式,将被盗证书强制设置为不信任。 2.使用证书吊销列表(CRL)。 
第一种方式比较好理解,但并不是所有公司都能获此殊荣。毕竟主流操作系统的用户数量庞大,根本不可能针对一个地区性的,或者规模很小的公司的被盗证书发布更新,强制不信任。因此第二种情况就至关重要了。每个证书中都包含CRL,其实这个可以理解为一个网址,通过这个网址可以获得证书吊销的相关信息。

因此如果一个小公司通过商业性CA购买的证书被盗了,只要将相关信息告知CA,这家CA就会将这个证书的内容添加到CRL中。随后任何一个用户在执行涉及到证书的操作,例如安装带有数字签名的软件,或者访问SSL网站的时候,系统都会通过这个CRL地址检索吊销清单,并查看当前软件或网站使用的证书是否位于清单中。如果不在,就证明这个证书依然是可信任的;如果在,就证明该证书已经被盗,因此软件或网站存在仿冒的可能。

而因为12306.cn使用了自己给自己颁发的证书,因此也就根本无法在自己的证书中包含CRL信息,所以会看到吊销信息不可用的提示,这意味着浏览器在告诉你,你所访问的网站,不一定能完全证明其可靠,这可能是真网站,但也有是钓鱼网站的可能。

而如果12306.cn的证书私钥丢失或被盗(看看去年底的大规模泄密事件,谁敢保证没有这种可能性),持有该证书的人想要伪造一个钓鱼网站,或者以铁道部的身份发布恶意软件,那真是轻而易举,并且铁道部对此会束手无策。

毕竟在线购买火车票的人全都安装了这个根证书,而该证书根本无法通过CRL吊销。此外还有一个更重要的问题,如果盗取该证书的人继续使用“SRCA”的身份给其他人以其他身份颁发证书,例如以银行或支付中介的名义,结果会怎样?因为所有在线购买过火车票的人,由于根证书的关系,系统已经信任SRCA的根证书,因此这些伪造的证书也会直接被信任。最坏的情况下,所有热门的SSL加密网站(购物、银行、股票….)要想被伪造都是轻而易举的。

什么意思呢?如果某天你访问的支付宝网站的证书信任链是下面这样,你觉得会是什么后果?


当然,上述希望可能永远不会成真,因此作为一般用户,如果你已经成功在线购买到火车票(恭喜你啊,你要不要去买个彩票试试手气),那么建议你在受信任的根证书颁发机构节点下将SRCA的根证书彻底删除。














0 0
原创粉丝点击