如何证明你访问的网站就是你想要访问的网站?
比如你在浏览器里输入www.baidu.com,想访问百度,浏览器显示一个百度的首页就能保证你访问的是真实的百度网站吗?
显然只靠看到的内容是无法证明这点的。今天我们就一起来探讨下这个问题。
01 PKI体系我们先从PKI说起,PKI是一个利用公共密钥理论和技术来实现并提供信息安全服务的具有通用性的安全基础设施。
PKI通过安全策略的集合可以实现机密性、完整性、有效性。
PKI体系主要由终端实体、证书注册机构、证书颁发机构和证书4个部分组成:
- 终端实体:PKI的最终使用者,可以是个人、设备或者进程。
- 证书注册机构RA(Registration Authority):是CA的接口机构,我们在采购服务器证书的时候,就是找RA操作的,当然RA也可以和CA合并。
- 证书颁发机构:CA,是PKI的核心组织,是一个具有权威的第三方机构,主要负责证书的颁发管理、CRL的发布和管理。
- 证书/CRL存储库:是用于存放证书和CRL。
这里的重点是CA机构,CA机构是被大家信任的机构,这个CA机构被信任后,他所颁发的证书也是就是可信的。
举个例子,生活中我们的身份证是我们身份的证明,我们的身份证是由公安局颁发的,当看到一个人的身份证后,我们就可以证明这个人的身份信息。
PKI体系中,CA相当于公安局,RA相当于可以办理身份证的派出所,证书相当于身份证,终端实体相当于身份证持有者。
02 PKI认证原理我们以访问百度网站为例来描述PKI体系的身份认证原理。
①百度通过提交CSR文件给证书提供商(RA、CA机构),CSR文件主要包含了通用名、组织名称、部门名称、国家、省份、城市、密钥算法、密钥长度、加密算法、公钥。这些都是用于生成证书的关键信息。同时证书颁发机构需要验证申请人的身份,也就是说不是谁去申请百度的证书机构都给颁发的。
CA机构认证申请人身份主要通过两个方式,一个是需要出示营业执照,另外一个就是通过域名解析的方式验证你申请的证书CN字段是否属于你。
比如百度申请的证书CN字段是baidu.com,那么CA机构会让你配置一个txt类型的测试域名,比如abc.baidu.com解析成指定信息,如果你可以配置,说明这个域名的管理方是你。
②RA/CA机构对申请者的身份验证完成后,就会使用申请者提交的CSR文件制作证书文件,并颁发给申请者,申请者把证书部署在服务器上。
③用户通过浏览器访问www.baidu.com时,当使用的是https协议时,服务器将会把百度的证书发给客户端,记住http协议是不会交互证书文件的。
④服务器将证书发给客户端。
⑤客户端对证书进行认证,认证步骤是重点,对于用户而言可能并没有或者从来也不知道怎么通过证书去验证对方信息,这是因为这都是浏览器帮你完成了。
03 验证证书那浏览器是如何通过证书去验证对方的身份的呢?
我们前面也提到了,证书是由CA机构颁发的,我们必须要信任CA机构,然后才能信任CA机构颁发的证书。
那哪些CA机构是我们信任的呢,浏览器都会有自己信任的CA机构列表,这里就包含了主流的CA机构,我们申请证书的CA机构一般也都是被浏览器所信任的。
这个时候就需要判断证书的真伪了,也就是这个证书是不是CA机构颁发的。
上图就是baidu.com的证书,里面有个字段是指纹,也就是我们常说的数字签名。这个指纹是CA机构使用自己的私钥对该证书所有字段进行加密后的信息,添加在证书的最后端。
客户端拿到这个证书后,因为已经是信任的CA颁发的证书,所以客户端本地是有CA证书的,此时用CA证书里的公钥对指纹进行解密,解密出来的数据应该是证书信息,这样就能证明这张证书是CA机构颁发的了。
为什么我们用CA的公钥解密指纹就可以证明这个证书是CA颁发的?
根据非对称密码学的特点,私钥加密的数据只能用成对的公钥解密,反过来说,我用CA的公钥解密,那么说明这个指纹一定是对应的私钥加的密,同时私钥永远都只能掌握在自己手里,因此颁发这个证书的一定是CA机构。
04 网站身份验证当然光证明这个证书是可信CA机构颁发的还不够,因为我作为第三方也可以拿到百度的证书。还是要继续验证这个证书是否是合法持有者持有的。
1)、证书里面有一个CN字段写的是baidu.com,因此你访问的域名必须是baidu.com结尾的域名。比如支付宝的网站拿着baidu.com的证书部署在服务器上,那用户就能轻易分别身份有问题,浏览器会报该网站不可信任。
仅仅通过域名来验证也不是完全保险的,因为还有域名劫持的问题,所以我们还有其他招数。
2)、客户端浏览器和服务端进行https协议交互时,客户端在验证证书的合法性之后,会进行协商后续数据的加密密钥,协商的过程服务端需要用私钥加密数据,客户端会用服务器的公钥解密,如果可以正常解密,那么说明服务端有私钥在手,同样,私钥永远掌握在自己手里,到这里才可以完成证明服务端的身份。
那又有同学要问了,如果私钥被盗取了呢,这里可以下结论,如果私钥被盗取了,就说明这个证书已经不安全了,证书持有者需要到CA机构去注销该证书,以避免信息安全风险。
-END-
Wireshark数据包分析实战:HTTPS加解密过程
,