Total Pageviews

Monday 7 March 2016

为什么在12306.cn买火车票要装根证书??

12306主页上有一段很显眼的文字—--“为保障您顺畅购票,请下载安装根证书。”这段文字和12306很多的其他问题一起成为网友诟病12306的话题,但是这个看似安全的根证书确可能会成为让12306用户们的安全受到严重威胁的东西。
  为什么在12306上买火车票要装根证书?想要回答这个问题,那么我们就必须先要提前回答说几个定义:  
电脑在与服务器交换敏感信息时会使用一种叫做SSL的加密方式。在很多情况下,交换敏感信息必须要通过这个方式来进行。包括12306在内,淘宝、京东等在交换敏感信息的时候都使用了SSL进行加密。
  那么,我们怎么知道网站是否使用了SSL加密呢?最简单的办法就是看看地址栏——如果网址前面写的是“https://”,那么这个页面就是使用SSL加密的。这意味着你访问的页面是安全的并且可以用来交换敏感信息。如果你使用的是Internet Explorer 7或者以上版本浏览器,你应该能在浏览器地址栏的最右边看到一把小锁头。就像下图所示的那样。点开这把小锁头,就能看到关于https的信息。
  用其他浏览器呢?现在流行的浏览器中,全部都会标示出来该网页是使用了https以防止窃听和用户的个人信息安全的。比如下边的图就是在Firefox中使用https浏览维基百科的画面。
  但是,谁又能保证https的安全呢?这里就又是一个概念:数字证书认证机构。它的译名很多,不过大致意思对就可以了。英文Certificate Authority,经常被缩写为CA。下文中也使用“CA”来称呼数字证书认证机构。
  CA是一个机构——打个比方,这就像是信用卡一样。一个人向银行申请信用卡,就像网站向CA申请证书。CA觉得网站的信用合格,就签发SSL证书;银行觉得申请者的信用合格,就签发信用卡。等等,什么又是“SSL证书”呢?这就是CA签发给网站用以证明网站身份的“信用卡”。有了SSL证书,加密网页才能被信任。当你在访问一个被https加密的网页时,网页会出示一份证书,这份证书有助于用户信任这个网站。没有正规CA签发的证书的网站是不会受到浏览器的信任的——就算你用了SSL来加密也没用。
  再看看前面的两张图片。第一章支付宝的截图中,CA就是:VeriSign Class 3 Public Primary Certification Authority - G5
  第二章维基百科的截图中,CA是:DigiCert Inc
  浏览器又上哪知道CA是正规的呢?那就是根证书库,这是一个操作系统认为可以被信任的CA的名单。几乎每个能上网操作系统(甚至包括诺基亚最弱智的S40系统)都有一个。在这里用Mac做示例。Mac的根证书库在:
  Finder-应用程序-其他(提示:OS X Lion或者以下操作系统叫“实用工具”)-钥匙串访问
  然后在最左边找“系统根证书”,点进去便是。看到的应该如下图所示。
  可以试着找一下VeriSign Class 3 Public Primary Certification Authority - G5—--肯定能找到!每次浏览器浏览https网页时,都会把网站出示的证书在这个库里面找一圈,能找到就OK,找不到的话,就证明你这个CA是不可靠的!
  SSL加密的目的除了保证用户信息在传输过程中的安全外,还保障了服务器的身份。有些简单的SSL证书仅仅需要用该网站域名的邮箱向CA发封邮件就能签发了——不过如果是一个组织、团体、基金会或者盈利性机构(尤其是类似于支付宝或者PayPal的网络支付服务),那么SSL证书的签发就会变得十分繁琐。网站需要提供大量的文件以证明该网站是可靠的。如果能够证明该网站是可靠的,CA才会给签发证书。
  还有一种证书被称作EV SSL证书(Extended Validation SSL),这种证书遵循全球统一的严格身份验证标准颁发的SSL证书,是目前业界最高安全级别的SSL证书。这种证书显示起来,就是俗称的绿色地址栏证书。在IE 7和以上IE浏览器便会出现绿色地址栏,并且滚动展示该网站的信息和CA信息。
  EV SSL的申请手续更复杂,申请费用也更多,但是可以换来更多用户的信任。左图是Firefox下显示EV SSL证书的样子。这个证书证明了这个网站的经营者为Wikimedia Foundation, Inc.,并且位置位于San Francisco California, US
  据一个叫做VeriSign的CA的统计,使用EV SSL能大幅提升用户对于网站的信任。
  总而言之,SSL证书的目的有两个:
  • 确保网站和用户之间的数据是加密并且可靠的
  • 确保网站所宣称身份的真实可靠
  如果访问12306.cn会出现什么情况呢?12306的确使用了SSL来加密以保障网页的安全,而访问直接访问12306就算不安装根证书也不会出现任何问题。以Chrome为例,访问主页不会出现任何问题,但是若要访问购票页面就会无法访问,如下图所示。
  12306会让我们访问一个叫https://dynamic.12306.cn/otsweb的网址。如果我们直接用Chrome访问这个网址呢?华丽丽的一幕出现了:显示“证书不受信任”。
  使用IE8浏览这个页面会出现类似的提示。
  回到Chrome,如果我们点击“仍然继续”,就会正常的看到购票页面没有任何阻力。IE8也是一样,不过IE8的地址栏整个都会变成红色的。
  如果我们点击旁边的小锁头来查看关于这个证书的信息呢?会出现下图。
  再点击“证书信息”,会看到这个12306的证书是一个叫做SRCA的CA签发的。
  但是在“钥匙串访问”里面根本没有一个叫做SRCA的CA。
  如果安装上了首页给出的“根证书”,(依然以Mac为例)钥匙串访问里面就会有一个叫做“SRCA”的CA!并且本来这个证书是不受信任的,安装之后就会被设置为“此证书已被标记为受此账户信任”。
  这样的话,浏览器和操作系统就会信任这个证书,便不会给予CA信息不对的提示了。
  “SRCA”又是何许人也?在上图中,可以看到SRCA的细节部分,“组织”填写的是Sinorail Certification Authority
  这也就不难分析了,“Sinorial”中的“S”和“R”,“Certification Authority”的“S”和“A”,就拼出来了“SRCA”。
  在搜索引擎中搜索Sinorail Certification Authority中的Sinorail,就会找到这样一个网站。叫做“中铁信息工程集团”。网址就是http://www.sinorail.com/。
  听名字就知道这网站跟12306肯定是亲戚关系。换种话说,就是自己给自己发证书。你说这证书能可信吗?
  正规CA的证书可不是白给的。要不然CA靠什么吃饭?一个SSL证书从每年三百块RMB到一万五不等。据我所知,最贵的证书是VeriSign签发的,一万五的那个就是他。而便宜的三百块证书——只要不是VeriSign,其他CA签出来的最便宜的证书差不多都这个价。比较便宜的代表是Go Daddy、Comodo等。为什么12306要使用自己给自己的证书呢?貌似唯一的合理解释就是省钱。能省大概三百到一万五不等。
  铁道部有时候买一张火车票就差不多够一年的证书钱了。
  那么又为什么说铁道部用自己的证书不安全呢?有些人在12306上买票时会看到“该站点安全证书的吊销信息不可用,是否继续”的提示语,这又是什么意思呢?
  从前有个倒霉的的荷兰CA,叫DigiNotar。这CA被黑客攻破,导致这家CA办法给一些用户的证书的私钥失效(私钥是在SSL加密环节中非常重要的东西),这就使得以这家CA的名义伪造证书成了可能。黑客可以通过这家公司的名义伪造证书给一些非法网站,客户一看这是加密过的还是大型CA签出来的证书便很容易信任。因为DigiNotar名气很大,并且很多大公司都使用它的证书,微软等操作系统厂商在这事情发生之后开始忙不迭的发布更新补丁来宣布DigiNotar的证书失效。
  微软在 KB2607712 补丁中宣布了DigiNotar的根证书无效。原文如下:
Microsoft 已获悉 DigiNotar 颁发了至少一个虚假数字证书,DigiNotar 是受信任的根证书颁发机构存储区中出现的一个证书颁发机构。虚假证书可能用于哄骗内容、执行网页仿冒攻击或者针对所有 Web 浏览器用户(包括 Internet Explorer 用户)执行中间人攻击。虽然这不是 Microsoft 产品中的一个漏洞,但是此问题会影响 Microsoft Windows 的所有受支持版本。 
  这家倒霉公司最后因为这件事华丽丽的破产了。
  正如这件事一样,有些知名CA出了事,微软这些系统厂商会忙不迭的发布补丁来宣布该CA的根证书失效——有些小CA,尤其是“SRCA”这样貌似只给12306.cn一个网站签证书的CA,人还懒得管你呢!那么小CA的私钥失窃之后会有什么不就措施呢?那就是证书吊销列表,英文全称Certificate revocation list,简称CRL。下文也称呼它为CRL。更详细的内容可以参考这里这里(英文)
  CRL是干什么的呢?比如你买的证书被盗了,只要将信息报告给CA,那么CA就会把你这个证书的信息添加到这个CA的CRL中,每次浏览器浏览加密网页时,都会检索CRL信息——如果没有的话,就会提示该站点安全证书的吊销信息不可用,是否继续。想必读到这里大家也都知道了,12306的证书没有CRL信息。这也就意味着,12306所使用的证书一旦失窃,系统厂商不会管这个,甚至连最后一根救命稻草CRL都没有。
  简而言之,如果证书出了事,两种解决办法:
  • 系统厂商发补丁宣布该证书失效
  • 通过CRL宣布证书失效
  不过可惜的是12306出了事,这两招哪一个都不顶用。
  如果证书失窃,会有什么后果?最可能的后果就是像前面的倒霉蛋一样倒闭。不过我大天朝铁道部(尽管已经倒闭)欠了两千多亿还巍然不动,这个可能便没有了。前面提到的两种解决方案一个也用不了,这就意味着遭殃的一定是用户。证书失窃,任何人都能用此来伪造虚假证书。尽管SRCA颁发的证书默认是不受到系统信任的,但是中国这么多去过12306网站买过火车票的人——假设所有人都安装了这个根证书使的系统对此证书信任——一个绿色地址栏都能提升用户这么大的信任,违法网站只要获得了SRCA颁发的证书,岂不就能轻易骗得用户的信任?
  如果你是Mac用户,并且访问https://www.12306.cn没有任何障碍,那么可以参考这个视频中的步骤来将SRCA的证书设为不信任。如果要购票,反其道而行之即可。
  从证书的角度看,中国很多大佬都做的非常不到位。比如我手里的建行网银,在安装U盾的时候必须安装一个网银根证书。SSL证书方面中国也做的很不到位。比如京东只有在用户登陆的时候才用了SSL来加密,而京东甚至在下订单的时候依然是明文传输。新浪微博在更改个人敏感信息时仍然使用明文传输,而twitter在早期甚至连微博内容都用https。如果使用不加密的公共Wi-Fi的话,那么在同一个Wi-Fi热点下有一个黑客,黑客便可以非常轻松的窃取到你的个人信息。
  P.S.:现在12306在付款的过程中使用了VeriSign签发的合格的证书,但是这样并不代表着上面所说的可能造成的严重影响不会发生。
  这个地址打开后便可以看到EV SSL的效果:https://www.evssl.cn/en/
  HTTPS - 维基百科:https://zh.wikipedia.org/wiki/Https