目录
1.HTTPS是什么?
HTTPS也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层,由于HTTP协议内容都是按照文本的方式明文传输的,所以就导致了在传输的过程中会出现一些被篡改的情况。
例如"运营商劫持"
我们通过网络传输的任何数据包都会经过运营商的网络设备(路由器,交换机等),运营商的网络设备就可以解析出我们传输的数据内容并进行篡改。
当我们点击下载天天动听这个软件时,其实就是再给服务器发送一个HTTP请求,获取到的HTTP响应就包含了该APP的下载链接,当运营商劫持之后就会发现这个请求是要下载天天动听,那么就自动把交给用户的响应篡改成了QQ浏览器的下载地址了。
不止是运营商可以劫持,其他黑客也可以用类似的手段进行劫持,来窃取用户的隐私信息或者篡改内容,所以在互联网上,明文传输是比较危险的事情。因此HTTPS就是在HTTP的基础上进行加密,进一步确保用户的信息安全。
2.加密和解密
加密就是把明文(要传输的信息)进行一系列变换,生成密文。
解密就是把密文在进行一系列的变换,还原成明文。
在这个加密和解密的过程中,往往需要一个或者多个中间的数据辅助进行这个过程,这样的数据称为密钥。
3.HTTPS的工作过程
要想保证数据安全,就需要进行"加密",加密之后,在网络传输中不再直接传输明文了,而是加密之后的"密文"。加密的方式分为两大类:对称加密和非对称加密。
3.1对称加密
对称加密其实就是通过同一个 "密钥" , 把明文加密成密文, 并且也能把密文解密成明文。(明文+密钥->密文)(密文+密钥->明文)
在引入对称加密之后,即使数据被截获,由于黑客不知道密钥是什么,所以就无法解密,因此就不会知道真是的内容了。
由于服务器在同一时刻其实是给很多客户端提供服务,因此每个客户端的密钥都必须是不同的,所以服务器就需要维护每个客户端和每个密钥之间的关联关系。这是非常麻烦的,比较理想的做法就是在客户端和服务器建立连接的时候,就确定好密钥,然后客户端再把自己的密钥通过网络传输给服务器。
这种方式看起来挺美好的,但是如果密钥被黑客截获了,那不就完了吗。
通过上述就可以知道,密钥在传输中也必须进行加密传输,就需要先协商确定一个"密钥的密钥",因此就需要引入非对称加密。
3.2非对称加密
非对称加密就需要用到两个密钥,一个"公钥",一个"私钥"。公钥和私钥是配对的。
通过公钥对明文进行加密,变成密文。通过私钥对密文进行解密,变成明文。
也可以反过来,通过私钥对明文进行加密,变成密文。通过公钥对密文进行解密,变成明文。
由于对称加密比非对称加密效率高很多,运行成本低,速度快,因此只是对传输密钥这种关键环节使用非对称加密,对后续传输大量的业务数据都是用效率更高的对称加密。如果业务数据都使用非对称加密,整体的传输效率就会变得很低。
理想很美好,现实很残酷。
上述还存在问题:1)客户端如何获取到公钥?2)客户端如何确定这个公钥不是黑客伪造的?
如果发生下面情况呢?
之所以发生上述的问题,关键要点是因为客户端没有"分辨能力",客户端自己不知道当前这个公钥是不是黑客伪造的。所以要想解决上述问题,就需要引入第三方的可以被大家都信任的"公正机构"
3.3引入证书
在客户端和服务器刚建立连接的时候,服务器给客户端返回一个证书。这个证书包含了刚才的公钥,也包含了网站的身份信息。
这个证书就好比人的身份证, 作为这个网站的身份标识. 搭建一个 HTTPS 网站要在CA机构先申请一个证书(类似于去公安局办个身份证)
这个证书可以理解程是一个结构化的数据,里面包含了以下信息:
1)证书发布机构
2)证书有效期
3)公钥
4)证书所有者
5)数字签名
当客户端获取这个证书之后,会对证书进行校验,以防止证书是伪造的。
1.上述过程中,客户端拿到证书后,就需要对证书进行校验,这个过程就称为"证书校验",校验的核心机制就是"数字签名",这个数字签名本质上就是被加密的校验和。 如何进行校验,可以参考http://t.csdnimg.cn/K0wUF这篇博客。
那这个数字签名从哪来呢?
在颁布证书的时候,公正机构就会针对证书的各个属性计算出一个校验和,并对这个校验和进行加密,然后就得到了数字签名(公证机构就会使用自己的私钥对校验和进行加密,得到数字签名)。其中这个加密就是"非对称加密",公正机构会自己生成一对公钥和私钥,公正机构自己持有私钥,公钥就会发布给各个客户端设备(往往公钥都是内置到系统中的,安装了操作系统就会自带公正机构的公钥)。
2.此时客户端拿到了数字签名,就可以通过系统内置的公正机构的公钥进行解密了,然后得到最初的校验和。
3.客户端重新计算这里的校验和,和解密出来的校验和进行对比,如果校验和一致,就认为证书没有被篡改过,此时就认为公钥是可信的。
在上述机制下,黑客就无法对证书的内容进行篡改了,即使篡改了也很容易发现。
如果黑客收到证书后,直接修改里面的公钥,客户端在进行"证书校验"的时候就会发现校验和不一致,客户端就可以认为是被篡改过了。
那么黑客替换公钥后,能否自己替换掉数字签名,自己重新算一个呢?
答案是不能的,因为校验和好算,但是针对校验和加密需要使用公正机构的私钥才能进行。黑客自己没有这个私钥,如果黑客拿自己的私钥进行加密,客户端也就无法使用公正机构的公钥进行解密了,公正机构的公钥是客户端系统自带的,黑客无法替换。
黑客自己能否申请一个证书并完全替换掉服务器的证书呢?
这是不能的,因为申请证书,需要提交材料,其中就有网站的主域名,认证机构自然就会认证这个域名是否是你所拥有的。
综上所述,证书是可信的,通过了验证就说明公钥是服务器原始的公钥。
4.总结
HTTPS加密:
1)使用对称加密,加密业务数据
2)使用非对称加密,加密对称密钥
3)中间人攻击
4)使用证书,校验服务器的公钥
标签:协议,公钥,加密,证书,校验,密钥,HTTPS,客户端 From: https://blog.csdn.net/2302_82270778/article/details/137123197