(一)HTTPS是什么
HTTPS也是一个应用层协议,是基于http协议的基础上引入了一个加密层
HTTP协议内容都是按照文本,明文传输,这就导致在url中,我们可以轻易的拿到一些信息,这就导致了我们会出现“运营商劫持”
运营商劫持:简单理解就是,我传输的数据被中间商给更改了,加入我们要安装一个软件,点击链接后却跳转成另一个下载链接。
同时不仅运行商可以劫持,黑客也可以来劫持我们发送的信息,并获取甚至更改我们的信息
所以我们需要对传输的数据进行处理,让第三方无法轻易的知道我们传输了什么,即使知道了,也不可以让他进行修改
所以HTTPS就诞生了,通过对HTTP协议的加密,进一步的保证了用户的信息安全
(二)加密解密是什么
加密就是把明文(传输的数据)进行一系列的转换生成密文,解密则是相反
现在的加密解密,往往需要一个类似钥匙的通信工具,这样的工具,我们称为密钥(也就是对称加密)或者使用非对称加密
(三)HTTPS的工作过程
因为要保证数据安全,所以要进行加密,加密之后,我们就可以传输密文,加密的方式有很多,但是我们大致就分为上面说的:对称加密和非对称加密
1.对称加密
对称加密就是要通过同一个密钥,来进行加密解密,由我们进行加密并且先传输我们的密钥,服务器拿到密钥后再通过密钥来解密
引入了对称加密,即使中间商截获了我们的数据,由于不知道密钥是什么,就无法进行解密,也不知道请求的内容是什么
但是如果我们每一个客户端,都给我们服务器一个密钥,我们服务器还需要存储这个密钥,那就会导致服务器的维护成本过高,就会很麻烦,所以我们之后约定,每次传输客户端都给服务器传输一个临时的密钥,,通过这个临时的密钥我们来进行加密或者解密
我们会发现,那密钥怎么传输啊,如果密钥进行加密,那就还需要传输密钥,这不久死循环了吗?那如果密钥就明文传输,那中间商也可以很轻易的拿到密钥通过密钥再来解密我们之前传输的数据,那不就跟没有解密一样吗?
确实如此所以我们引人了另一种加密(非对称加密)
2.非对称加密
本质上讲,非对称加密也是要用到两个密钥,一个叫做公钥,一个叫做私钥
这两把钥匙是相互配对的,我们可以通过两种钥匙的任意一个来进行加密,再通过另一个进行解密
加密过程:
服务器会把自己的公钥公开,任何人都可以拿到这个公钥进行加密,但是我们无法进行解密,因为私钥在服务器手中。
我们客户端先向服务器索要公钥,客户端在本地通过公钥进行加密后,发送给服务器,因为中间商没有私钥,即便有了数据,也是密文不能解密,所以数据是安全的,服务器再通过私钥解密,还原出客户端发送的对称密钥,之后的数据交互就通过这个对称密钥来进行传输
中间⼈攻击
但是这个方法也有缺陷,我们中间商截获了服务器传给你的公钥,自己伪装成服务器,传给你一个他的公钥,这时你就会使用中间商的公钥进行加密,并且传输回数据,这时中间商就可以通过他的私钥进行解密,同时中间商还会伪装成客户端再给服务器发送数据,以后客户端与服务器传送的所有数据,中间商可以拿到
引入证书
上述我们说了只使用非对称传输和对称传输也不是一定安全的,我们需要判断给我们公钥的是否是我们想访问的服务器,这时就需要引入一个证书。
服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信 息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就⾏了,证书就如⾝份证,证明服务端 公钥的权威性
证书可以理解为一个结构化的字符串,里面有:
• 证书发布机构
• 证书有效期
• 公钥
• 证书所有者
• 签名
• ......
我们服务器的公钥私钥,就是再申请证书时,由特定平台给我们发放的。当服务端申请CA证书的时候,CA机构会对该服务端进⾏审核,并专⻔为该⽹站形成数字签名。
我们的证书就是由证书明文和签名构成,这个签名的形成有点类似我们之前的md5算法
通过证书解决中间人攻击
客户端和服务器建立连接时,服务器会给我们客户端返回一个证书,证书内有刚才的公钥,也有网站信息
当客户端拿到这个证书后,我们会对证书进行校验:
1.判定证书的有效期
2.判定证书的发布机构
3.判定证书的机构是否被篡改,我们会根据证书的明文再次计算签名,如果签名一样就认为没有被篡改
那这样就能保证我们传输的数据安全吗?
首先我们来看一下中间人有没有可能会篡改我们的证书?
1.中间人如果篡改了证书明文,但是他没有CA机构的私钥,所以无法生成一个新的签名,只能用之前的签名,这时我们客户端拿到后,重新通过证书明文来计算签名,就会发现不一致,就知道这个证书被修改了
2.中间人如果替换了整个证书,那我们就可以通过证书明文中的服务器信息,直接识别出证书被掉包了。
讲完了非对称加密,这时可能会有个疑问?那为什么不可以一直使用非对称加密,就是因为非对称加密计算量太大了,一般我们使用非对称加密都是用来传输对称加密的密钥。
(四)总结
HTTPS⼯作过程中涉及到的密钥有三组.
第⼀组(⾮对称加密):⽤于校验证书是否被篡改.服务器持有私钥(私钥在注册证书时获得),客⼾端持有 公钥(操作系统包含了可信任的CA认证机构有哪些,同时持有对应的公钥).服务器使⽤这个私钥对证书 的签名进⾏加密.客⼾端通过这个公钥解密获取到证书的签名,从⽽校验证书内容是否是篡改过.
第⼆组(⾮对称加密):⽤于协商⽣成对称加密的密钥.服务器⽣成这组私钥-公钥对,然后通过证书把公 钥传递给客⼾端.然后客⼾端⽤这个公钥给⽣成的对称加密的密钥加密,传输给服务器,服务器通过私钥 解密获取到对称加密密钥.
第三组(对称加密):客⼾端和服务器后续传输的数据都通过这个对称密钥加密解密