一、HTPPS是什么
是在HTTTP的基础上加上一个加密层
S指的就是SSL加密机制
二、为什么要给HTTP数据包加密
为了防止他人窃取请求中的数据或篡改里面的信息
比如在你发送一个登录请求时,里面的body部分就包含了你的账号和密码的信息
如果不加密,相当于是明文发送,一旦被黑客劫持数据包,那么有会泄露个人账户密码了
比起不让别人随意截取你的数据包,加密是一种成本更低更有效的方法
三、HTTPS的工作过程
HTTPS只是对HTTP进行了加密
解密之后的数据就是HTTP数据
加密的本质就是,解决掉HTTP明文传输的特点
3.1引入加密
3.1.1对称加密
对称加密:加密和解密用的是同一个密钥("密码本")
这里有两个问题:
- 首先对称加密要求客户端和服务器双方使用同一个密钥
- 不同客户端和服务器之间应当使用另一套密钥
因为:如果所以客户和服务器用的都是同一套密钥,那加密就没有意义了
这就意味着,当客户端(服务器) 中的一方连接到另一方的时候
- 需要生成一个随机的密钥
- 通过网络传输把这个密钥告知给对方
这里又又有个问题,那你在传输密钥的过程,因为对方还不知道密钥是啥,所以密钥不可能加密之后再传输把?
问题来了:如果传输过程中,被黑客获取到了密钥,那不就前功尽弃了码
这里就相当于在监控底下输入银行卡密码
所以对称加密这条路算是走不通了,这时候就要引入非对称加密了
3.1.2非对称加密
非对称加密:也就是拥有两个密钥,一般是一个公钥(公开的),一个私钥
公钥加密,私钥解密
那既然如此,上面为什么还要提到对称加密呢?
非对称加密,只是用来传输密钥的,并不适合传输数据
因为,非对称加密和解密对于系统CPU来说需要消耗大量的资源
针对少量的数据可以使用非对称加密
传输大量的数据就需要使用对称加密
非对称加密是怎样做到,把密钥安全的传输给对方的呢?
上面说过,公钥加密,私钥解密
公钥人尽皆知,黑客也能知道
私钥是一方,进行私密保存的
比如:客户端使用 公钥 对明文(原始数据)进行加密
得到密文 (明文加密后的数据 ) 发送给服务器
这个过程中黑客是可以知道公钥的,但是他不知道私钥,无法解密
上述这种情况,是由服务器生成公钥和私钥
私钥服务器进行私密保存
公钥通过传输告知给客户端
尽管如此,这还不是很安全
黑客也可以冒充服务器,创建出一套公钥和私钥
我画个丑图解释一下
相当于客户端用了黑客的公钥,对数据进行了加密
黑客只需要用自己的密钥就可以轻松对数据进行解密了
后续的步骤呢就是:
- 黑客使用服务器真正的 公钥 对原始数据进行加密
- 再发送给服务器
- 服务器用自己的密钥对数据进行解密,发现没问题
如此一来,客户端和服务器都不会发现自己的数据泄露了
所以就引入了证书
3.2引入证书
证书的作用:
证书用来验证 拿到的公钥是否是真的,而不是黑客伪造的
证书的格式:
证书是一个结构化的数据(包含有很多属性,最终以字符串的形式提供)
证书中包含了一系列的信息
比如服务器的主域名,公钥,证书有效期......
证书咋申请
证书由服务器方,去向第三方机构进行申请
证书保证真伪性的流程
刚才说过,证书中保存有公钥的信息
那么黑客是否能故技重施
修改里面的公钥,把他的公钥改成自己的呢?
不行!
客户端拿到证书之后会先进行验证证书的真伪
证书验证真伪的过程
首先证书里的信息包括
服务器的域名:xxxxxx
证书的有效时间:xxxxxx
服务器的公钥:xxxxxx
公证机构的信息:xxxxxx
........................等等信息
最重要的是
证书的签名:xxxxxxx
证书签名其实就是一个经过加密的校验和
这个签名是由,把以上所以信息中的字段通过CRC/MD5等算法
计算后得到的一个较短的字符串,作为校验和
校验和是一种,极难逆推的结果,他是防止数据被篡改的关键
所以,一旦里面的字段发生改变,那么算出来的校验和就肯定不同
不仅如此,公证机构还会对这个校验和也就是证书签名,使用公证机构 的 私钥进行加密
客户端在拿到 证书信息之后
1.会先根据以上字段进行同样的校验和计算 得到结果 result1
2.然后再根据 公证机构 的 公钥 对证书签名的校验和进行解密 得到结果 result2
然后对比两个结果是否相等
相等:说明证书中的内容没有被修改过
不想等:说明证书中内容被修改过了,此时浏览器会弹出一个警告,"你访问的页面有风险"
这个警告经常半夜学习的小伙伴都见过
还有一点就是,这些知名的公证机构的公钥,是存储在客户端的设备系统当中的