目录
一、HTTPS是什么
加密是什么
二、HTTPS的工作过程
(一)对称加密
(二)非对称加密
(三)在非对称加密的基础上,引入证书校验
证书是什么
证书的内容
用证书解决中间人攻击
三、总结
一、HTTPS是什么
HTTPS 也是一个应用层协议.是在 HTTP 协议的基础上引入了一个加密层.
HTTP 协议内容都是按照文本的方式明文传输的.这就导致在传输过程中出现一些被篡改的情况.
臭名昭著的“运营商劫持”
当我们在浏览器中下载一个“天天动听”,正常情况下,会跳转出这个下载链接。
但是遇到运营商劫持的情况,下载链接就会变成QQ浏览器的链接。
当我们通过网络传输任何网络数据时,都会经过运营商的路由器/交换机,运营商作为中间人,就能解析出你传输的网络数据,并进行篡改。
点击"下载按钮",其实就是在给服务器发送了一个 HTTP 请求,获取到的 HTTP 响应其实就包含了该APP 的下载链接.运营商劫持之后,就发现这个请求是要下载天天动听,那么就自动的把交给用户的响应给篡改成 "QQ浏览器" 的下载地址了。
在互联网上,明文传输是一件很危险的事情,因此我们在HTTP的基础上进行加密得到了HTTPS。
加密是什么
- 加密就是将明文(需要传输的数据)经过一系列操作,变成密文。
- 解密就是将密文经过一系列操作,变成明文。
二、HTTPS的工作过程
HTTPS在HTTP的基础上对网络数据进行了加密。
加密方式有两种:对称加密和非对称加密。
(一)对称加密
对称加密就是使用同一个密钥,把明文加密成密文发送出去,接收方再用这个密钥将密文解析成明文。
引入对称加密之后,即使数据被截获,由于黑客不知道密钥是啥,因此就无法进行解密,也就不知道请求的真实内容是啥了. 但事情没这么简单.服务器同一时刻其实是给很多客户端提供服务的.这么多客户端,每个人用的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了,黑客就也能拿到了).因此服务器就需要维护每个客户端和每个密钥之间的关联关系,这也是个很麻烦的事情。
因此客户端与服务器建立连接的时候,就约定好密钥是什么。
但是在客户端与服务器约定密钥的时候,如果密钥用明文传输,那黑客也能读取到密钥并破解。
这样就形同虚设了,因此密钥也要加密传输,这就需要一个“密钥的密钥”,再这样下去,这样就死循环了。于是引入了非对称加密。
(二)非对称加密
非对称加密在对称加密的基础上多使用了两个密钥:公钥和私钥。
公钥和私钥是配对的.最大的缺点就是运算速度非常慢,比对称加密要慢很多.
- 通过公钥对明文加密,变成密文
- 通过私钥对密文解密,变成明文
也可以反着用
- 通过私钥对明文加密,变成密文
- 通过公钥对密文解密,变成明文
- 在上述过程中,公钥的作用是用来封装对称密钥,相当于是把对称密钥给锁起来。
- 私钥保存在服务器端,用来解开封装对称密钥的锁,从而得到对称密钥。
在这个过程中,黑客要得到私钥才能进行解密,只用服务器才有私钥,即使公钥被黑客知道了,也不能破解出密钥是什么。当密钥被安全告知给服务器,后续客户端和服务器之间的数据传输,就都靠对称密钥来加密了。
当前场景一共有三个密钥(也相当于三个步骤):
- 客户端生成的对称密钥,用于对后续数据进行加密。
- 服务器生成的公钥,用来对对称密钥进行加密传输,可以告知给所有设备使用。
- 服务器持有的私钥,用来解密出对称密钥。
(三)在非对称加密的基础上,引入证书校验
在非对称加密的基础上,还是存在重大的隐患的。
我们知道公钥是由服务器生成的,再传输给客户端,问题是:
- 服务器生成的公钥,是如何传输到客户端的呢?
- 客户端在收到公钥的时候,怎么分辨这个公钥是不是黑客伪造的呢。
中间人攻击
在公钥传输给客户端的时候,黑客可以使用到中间人攻击,获取到对称密钥。
在中间人攻击的时候,黑客实现了一个“欺下瞒上”的效果。
这个漏洞关键点在于,客户端无法区分收到的公钥是否是被篡改过的,于是就引入校验机制,来验证收到的公钥。
证书是什么
服务端在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就是公钥的载体。
作用:
- 安全传递公钥:证书里包含服务器公钥,借助 CA 机构的可信体系,能让公钥在传输到浏览器等客户端时,避免被中间人篡改、替换,就像给公钥 “保镖护送”,确保客户端拿到的是服务器真实、未被污染的公钥 。
- 证明身份合法性:它是经 CA 认证的 “身份凭证”,向客户端证明 “我这个服务器是合法、可信的,不是假冒的” 。客户端会校验证书,若证书有问题(比如过期、被吊销、不是受信任 CA 签发),浏览器会警告,不让不安全连接建立,防止用户连到钓鱼网站 。
服务器在搭建的过程中,就可以向第三方公证机构申请证书,然后保存在服务器端。
证书的内容
证书中包含了:
- 证书的颁布机构是谁
- 证书的有效期是多久
- 服务器的域名是什么
- 服务器的公钥是什么⭐️
- 证书的数字签名是多少(被加密的校验和)⭐️
其中证书的数字签名相当于身份证一样,用于校验证书的真伪,它是将证书里面的公钥和其他数据部分代入一个固定的公式(比如hash函数)算出来的一个数字,然后第三方机构也生成一对非对称密钥(pub2,pri2)然后用私钥pri2对校验和进行加密,数字签名本质上是一个被加密过的校验和。
用证书解决中间人攻击
解决中间人攻击就在于防止服务器生成的公钥被篡改。
过程是这样的:
- 在客户端请求建立连接后,得到服务器发来的证书(公钥的载体)。
- 客户端针对收到的证书进行解析,计算其中的校验和1。
- 客户端使用认证机构的公钥pub2解析证书中的数字签名,得到校验和2.
- 判断校验和1与校验和2是否相等。
原理:
原理在于,证书中的其他部分(包括公钥)相当于是计算过程,而数字签名是加密过的计算结果。
如果黑客写改了证书中的公钥,那就是计算过程出现错误,那么计算结果(校验和)肯定就错误。
而用户拿到公钥,就相当于有了参考答案,就能验证黑客是否对证书进行了修改。
那如果黑客连同公钥(过程)和数字签名(答案)一起改了呢,改了之后也必须对新的校验和进行加密(这里只能用黑客自己的私钥,拿不到认证机构的私钥),依旧会被判断出。
引入证书,是防止黑客修改公钥
黑客看到公钥是啥,无所谓(本身公钥就是公开的)
黑客看到校验和,无所谓,本身只是用来校验数据,没有啥别的意义整个过程只是为了保证客户端可以验证,公钥是合法的
只要公钥的合法性验证通过,后续客户端继续使用公钥对对称密钥加密
后续继续使用对称密钥来进行加密传输
三、总结
HTTPS 工作过程中涉及到的密钥有三组.
- 第一组(非对称加密): 用于校验证书是否被篡改.服务器持有私钥(私钥在注册证书时获得), 客户端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些,同时持有对应的公钥).服务器使用这个私钥对证书的签名进行加密.客户端通过这个公钥解密获取到证书的签名,从而校验证书内容是否是篡改过.
- 第二组(非对称加密): 用于协商生成对称加密的密钥.服务器生成这组私钥 - 公钥对,然后通过证书把公钥传递给客户端.然后客户端用这个公钥给生成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密密钥.
- 第三组(对称加密): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密.
其实一切的关键都是围绕这个对称加密的密钥.其他的机制都是辅助这个密钥工作的.
第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器.
第一组非对称加密的密钥是为了让客户端拿到第二组非对称加密的公钥.