首先简单理解一下什么是数字证书。这里是一篇英文文档,描述的很形象。形象的描述了什么是公钥,什么是私钥,如果确保数字证书的可靠性等。
下面,我们看一个应用"数字证书"的实例:https协议。这个协议主要用于网页加密。
一般我们电脑的浏览器中都有一些受信任的证书颁发机构列表, 里边存储的都是一些机构的信息。这些机构都是权威的。当然可以通过安装软件的方式,来增加证书颁发机构,比如中国银行的根证书软件,阿里巴巴的根证书软件。默认我们认为这些软件都是从官网下载的,是绝对的没被篡改的,可靠的。简单来讲,根证书存在的意义,就是验证偶尔从网络上传到浏览器的数字证书的真假。
当我们向一个网站发起加密访问协议后,网站会返回一个数字证书M给你。那么我们怎么确定这个证书M没有在途中被人篡改过呢?这里就用到了根证书。网站返回来的数字证书都是一定格式的,记录了网站的名称,公钥,以及证书颁发机构A,而且有的地方,是用这个机构A的私钥加密过的。我们的浏览器会根据这个证书写着的颁发机构A,去“受信任的证书颁发机构”列表中,找到这个机构A,然后通过本机中存储的关于机构A的信息,去检查这个证书有没有被篡改过。
有人说,怎么根据根证书去验证数字证书M有没有被篡改过呢?其实这里也用到了对称加密。如果根证书对某个网站颁布了数字证书,就是用自己的私钥加密根证书的部分内容。这个根证书颁发机构把自己的公钥放入到软件中,安装到客户计算机中。用户收到安全证书M后,会用根证书机构的公钥去解密这个证书,如果能解开,说明没有被修改过。如果不能解开,说明别修改了,不安全了。
比如说,证书传送途中,被某个组织截获,他们想篡改,而且他们也篡改了。但是注意现在有一点,他们篡改之后是需要加密的,因为最终的浏览器是会用公钥解密的。他们此时只能用根证书机构的私钥加密,最终的浏览器才会打开,才不会察觉。用任何其他的私钥加密,浏览器都是打不开的。而此时他们又没有根证书机构的私钥,所以就无法篡改了。一旦篡改就会被发现。
继续回到例子中。此时,浏览器收到网站的安全证书,通过根证书列表查看验证,证明了这个证书是安全的,可靠的。客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。过程如下图
首先,客户端向服务器发出加密请求。
服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。
客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。
如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。
如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。
如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。
下边是关于12306网站证书的一些看法,部分转载。
12306网站买票,会出现证书过期或者是不可靠等提示,这里原因是什么?
大家都知道https的网页是加密的,是需要证书的,网购火车票的网址是http://www.12306.cn/mormhweb/kyfw/,这个是http的普通网页,没有加密,是明文传输的,不需要证书。但是他里面有个iframe,也就是嵌套了另一个网页,地址是https://dynamic.12306.cn/otsweb/,这里就是https的了。
但是如果使用Chrome、Firefox或者IE8、9等浏览器都会显示这个网站的证书有安全问题。因为dynamic.12306.cn使用的是SRCA颁发的证书,这个证书在我们的计算机中是默认不被信任的,也就是不安全的。
Chrome:
IE9:
什么是SRCA?SRCA就是Sinorail Certification Authority,中文名叫中铁数字证书认证中心,简称中铁CA。这是个铁道部自己搞的机构,相当于是自己给自己颁发证书,当然不会被信任。更多信息请见这个机构的网站。
于是,12306就在首页显著位置标明:为保障您顺畅购票,请下载安装根证书。一般人如果看到这个肯定会按照要求下载安装的。下载后解压里面有个“SRCA根证书安装说明手册.doc”,这个doc格式我就先不吐槽了,还是先说说内容吧。
这个文档一开头就有这么一段话:
尊敬的用户:
您现在安装的是中铁数字证书认证中心(中铁CA,SRCA)的根证书,完成这个操作可以使您的购票体验更为顺畅,同时获得一个更安全的网络购票环境。中铁CA是由工业和信息化部审批通过的合法电子认证服务机构,该产品及相关操作不会对您的计算机构成危害,请您放心使用。
安装了你的证书会使我的网络购票更顺畅更安全?我怎么不知道证书还有这种神奇的能力?是不是Windows优化大师、360之类的软件都应该集成一个安装SRCA的证书的功能啊?
再看后面,“该产品及相关操作不会对您的计算机构成危害,请您放心使用。”怎么感觉好像是此地无银三百两呢?
玩笑话就说到这里吧,下面来说说安装了这个证书到底会有什么危害。
下面由于涉及到一些密码学的知识,限于篇幅和本人的表达能力,可能解释得不是很清楚,如果有什么不明白的地方建议学习一下这篇文章,图文并茂,解释得比较清晰。
如果你按照这个文档的步骤安装了SRCA的根证书的话,那么以后所有SRCA颁发的证书在你的电脑上都会被认为是安全的。这有什么危害呢?首先SRCA是一个*内的部门,所以他完全有可能会被有关部门控制。如果有关部门利用SRCA的私钥伪造了一个Gmail的证书,然后有关部门再通过电信运营商或者某墙拦截下来你和Gmail服务器之间的所有通信,然后把自己伪造的证书发给你,由于你安装了SRCA的根证书,你就会认为这个证书是安全的,也就是说你就会以为你收到的内容是Gmail服务器发送的。这样有关部门就在你和Gmail服务器之间充当了一个中间人的角色。这样你和Gmail服务器之间的所有加密通信就都神不知鬼不觉得被有关部门监听了,他们就可以得到你的邮件的内容甚至还有可能得到Gmail的密码。这就是著名的中间人攻击(MITM)。
这里只是以Gmail为例,因为有关部门多次试图获得一些异见人士的Gmail邮件内容,就不详细说了。
说完了安装证书的危害,那么为什么不使用VeriSign这个受信任的机构颁发的证书呢?
有些人就开始出来为铁道部辩护了,说铁道部不愿意花钱买证书,或者技术人员提出了要购买证书的要求但是领导不懂这些所以不同意等等。
我最开始也觉得这个是有可能的,毕竟这是在天朝。但是后来我发现https://epay.12306.cn/这个完成订票后用来支付的二级域名就是用的VeriSign颁发的证书。那为什么登陆账号以及订票不使用这个VeriSign的证书呢?
由于我实在无法找出合理的解释,所以我只好认为是这样的:铁道部由于某个特殊的原因,希望大家在自己的电脑上面安装SRCA的根证书,但是他自己也知道使用自签名的证书是有危险的,不过登陆和订票部分只是涉及到用户的隐私问题而已,即使有安全问题也无所谓的,天朝的p民本来就没有什么隐私的。但是支付部分涉及到钱,如果出了事儿就比较麻烦,所以支付部分还是使用了VeriSign的证书。