因为HTTP协议内容均是按照文本的方式进行明文传输的,这就导致在传输过程中很容易出现一些信息被篡改的情况。HTTPS协议通过在HTTP协议的基础上引入了一个加密层解决了这个问题。
因为HTTP协议只规定了数据如何通过浏览器进行传输,并没有对这些传输的数据设定一些安全措施,这就导致了这些数据是裸奔在网络中的。这些明文传输的数据会经过路由器,WiFi热点,通信服务运营商,代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就会完全暴露。劫持者甚至可以篡改传输的信息不被发送,接受双方察觉,形成“中间人攻击”,所以我们必须要采取一种方式对http运输的数据进行加密。
想必大家都曾遇到过一种情况,就是早些年在上网的时候,我们在某些网站下载一些软件,明明想下载的是某某音乐软件,但是当下载完成之后却发现给你下载的是某某游戏盒子,这就是HTTP请求被拦截的一种典型情况,一些黑客也可以用类似的手段在窃取用户隐私信息或者篡改内容,所以在互联网上明文传输是一件很危险的事!
加密方式可以分为很多种,整体上可以分成对称加密和非对称加密两大类,下面对这两种加密方式分别介绍:
对称加密
对称加密其实就是通过同⼀个 "密钥" , 把明⽂加密成密⽂, 并且也能把密⽂解密成明⽂.
非对称加密
非对称加密要⽤到两个密钥, ⼀个叫做 "公钥", ⼀个叫做 "私钥",公钥和私钥是配对的。
通过公钥对明⽂加密, 变成密⽂;通过私钥对密⽂解密, 变成明⽂。
HTTPS通过非对称加密+对称加密+证书认证的方式实现加密策略的。
什么是证书呢?
服务器在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里可以获取公钥,证书就如同身份证,证明服务器公钥的权威性。

证书可以理解成是⼀个结构化的字符串, 里面包含了以下信息: • 证书发布机构 • 证书有效期 • 公钥 • 证书所有者 • 签名 等。 需要注意的是:申请证书的时候,需要在特定平台⽣成查,会同时⽣成⼀对⼉密钥对⼉,即公钥和私钥。这对密钥对儿就是用来在网络通信中进行明⽂加密以及数字签名的。 其中公钥会随着CSR文件,⼀起发给CA进行权威认证,私钥服务端自己保留,⽤来后续进⾏通信(其实主要就是用来交换对称秘钥)。
下面是HTTPS协议的具体工作流程图:

其中HTTPS工作过程中涉及到的密钥有三组:
第⼀组(⾮对称加密): ⽤于校验证书是否被篡改. 服务器持有私钥(私钥在形成CSR⽂件与申请证书时获得), 客⼾端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器在客⼾端请求是,返回携带签名的证书. 客⼾端通过这个公钥进⾏证书验证, 保证证书的合法性,进⼀步保证证书中携带的服务端公钥权威性。
第⼆组(⾮对称加密): ⽤于协商⽣成对称加密的密钥. 客⼾端⽤收到的CA证书中的公钥(是可被信任的)给随机⽣成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥。
第三组(对称加密): 客⼾端和服务器后续传输的数据都通过这个对称密钥加密解密。
其中⼀切的关键都是围绕这个对称加密的密钥. 其他的机制都是辅助这个密钥⼯作的.
1.中间人有没有可能篡改该证书?
2.中间人整个掉包证书?