前言
日常工作中,偶尔会遇到证书相关的问题,比如浏览器提示证书不可信、证书过期等。实际上,我们访问大多数网站时,数字证书都在背后默默的工作。那么,什么是数字证书?数字证书又是如何工作的呢?
信息传递交换
日常访问网站其实就是信息传递交换的过程。举例来说,访问购物网站,会将账号、密码发送给购物网站,购物网站收到后,会返回给我们用户信息、网站页面等内容。在此过程中,用户的账号密码、购物网站的网页内容,这些都是信息。包括后续的用户付款给购物网站,购物网站返回订单号这些,也都是信息传递交换。
既然涉及到信息传递交换,那么有一个问题就不得不考虑,就是信息的安全性。所谓信息的安全性,可以理解成通信双方交换的信息,不被第三方截获,或者即使被第三方截获,但是信息是加密的,第三方也破译不出原始信息。
其实这个过程我们在电视剧中经常看到,首先截获电文,然后破译电文密码。
互联网同样也面临着信息安全的问题,解决的方法也很简单,就是对信息加密。
对称加密、非对称加密
对信息加密的方法可以分为对称加密和非对称加密两类,每类又有多个算法支持实现。
加密算法对应有专门的密码学,不做太多介绍,这里介绍下两种方法的区别。
对称加密:即消息发送方、消息接收方两者用的密钥是相同的。消息发送方用密钥对信息加密,消息接收方用同样的密钥对信息解密。
对称加密所面临的一个问题是:在双方通信之前,如何将密钥传递给对方,且不被第三方截获?
非对称加密:即消息发送方、消息接收方两者用的密钥是不同的,密钥分为两个,分别是公钥和私钥。以购物网站为例,购物网站使用密码学安全伪随机数生成器生成一对密钥,其中一个为公钥,一个为私钥。私钥由购物网站自己保管,购物网站自己确保私钥不外泄。公钥可以发放给任何用户。在发放公钥的过程中不怕被监听、截获。
用户获得公钥后,发送给购物网站的信息使用公钥进行加密,购物网站接收到信息后,使用私钥进行解密。同理,购物网站发送给用户的信息,使用私钥加密,用户收到后,使用公钥解密。加密和解密使用的密钥不同,这就是非对称加密。
注意:使用非对称加密,用户发给购物网站的信息不怕被截获。因为即使截获,截获者没有购物网站的私钥,也不能够解密出信息,所以信息是安全的。且公钥加密的信息,只有对应的私钥可以解密;私钥加密的信息,只有对应的公钥可以解密。
这里信息不能解密,指的是短时间内不能解密(在数以年计的时间内不能破解)。
两种方法的优劣
通过上面的介绍,非对称加密似乎要比对称加密更安全,那对称加密是不是就完全没用了呢?
其实不然。因为非对称加密逻辑上更复杂,所以其效率要低于对称加密。实际应用中,通常是两种方法结合使用。先使用非对称加密建立安全通道,然后再使用对称加密传递信息。
数字证书
使用非对称加密已经足以保证信息安全了,为什么还要引入数字证书呢?
考虑一种情况,用户要访问购物网站Xd.com。当用户在搜索引擎中输入"X东",搜索引擎可能会将用户引入到一个钓鱼网站。该钓鱼网站有自己的公钥、私钥,同时假冒"X东"的名义,将公钥返回给了用户。用户此时得到的是钓鱼网站的公钥,但是用户是不知道的。照样将自己的信息通过公钥加密,发给钓鱼网站;同时,钓鱼网站将信息使用私钥加密,发送给用户。
用户使用本地的公钥能够解密网站返回的信息,于是认为自己访问的是真正的购物网站,然后付款,然后就没有然后了。。。。
一段时间之后,用户发现自己被骗了,很生气。。。
这就引出的一个问题:用户如何确认自己所获得的公钥真的是购物网站的公钥呢?由于用户已经被骗过了,即使现在购物网站再三保证,用户也不信任购物网站了。这时候就需要数字证书了。
其实这一点和生活中的例子非常像。生活中交易双方互相不信任时,通常会找一个第三方机构来做担保。虽然交易双方互相不信任,但是交易双方都信任担保结构,于是将钱和物存放在担保机构,由担保机构促进交易完成。
数字证书认证机构
数字证书认证机构(Certificate Authority,简称CA)充当的角色就是担保机构。CA是一个非常权威的角色,无论是网站,还是个人用户,都信任CA,且相信CA的结果。CA有自己的公钥和私钥,私钥自己保管,公钥公开。
还是以购物网站"X东"为例,"X东"生成了公钥和私钥,私钥自己保存,公钥不直接给用户(因为给了用户也不能确认真正的来源),而是将公钥以及公司信息发送给CA。CA负责核实"X东"的真实身份,如果核实通过,则将公钥、公司信息、到期时间等信息拼在一起,并使用CA自己的公钥加密,发送给购物网站"X东"。CA发送给购物网站的内容就是数字证书(digital certificate)。
注意上面的内容,CA有责任也有能力负责核实申请证书者的真实身份。如果钓鱼网站想假冒"X东"的身份,申请证书,是不会审核通过的。
数字证书的作用
购物网站从CA获得了数字证书,当用户访问购物网站时,购物网站不再将自己的公钥发送给用户,而是将从CA获得的数字证书发送给用户。
用户获得数字证书后,使用CA的公钥对数字证书进行解密。注意,因为CA的数量比较少,且CA的公钥都是公开的,所以客户端软件(如浏览器)都已经内置了CA公钥,或者可以动态请求获取、更新CA公钥,因此CA的公钥通常是不能作假的。如果用户使用CA公钥能够解密成功,说明证书中的内容(购物网站的公钥、过期时间等)是可信的,这样就能避免使用了伪造公钥的情况发生。
后续的流程就和上面的一样了,用户通过购物网站的公钥对信息加密,然后发给购物网站,购物网站使用私钥解密;同时,购物网站使用私钥对信息加密,返回给用户,用户使用购物网站的公钥进行解密。保证了信息的加密性,且保证了信息来源的正确性。这样,用户就可以愉快的购物了。
以上就是数字证书的全部内容。
后记
网上很多文章在介绍数字证书时,也一起讲了数字签名。但是我在看这两个知识点时,感觉两者穿插着理解非常容易混轮。
实际上,虽然数字证书和数字签名都是用非对称加密,但是两者的功能是不一样的。数字证书是保证了信息的加密性,数字签名是保证了信息的完整性。
我理解的数字证书和数字签名的工作流程是这样的:首先使用非对称加密创建一条安全通道(这一步用到了数字证书),安全通道建立之后,信息可以明文传递。在传递信息时,在附加上数字签名,保证信息的完整性。两者是工作在不同的阶段。
完。