HTTPS 协议原理
- HTTPS的概念
- 理解HTTPS概念
- [HTTPS 的工作过程探究](#HTTPS 的工作过程探究)
-
- [方案1 - 只使用对称加密](#方案1 - 只使用对称加密)
- [方案2 - 只使用非对称加密](#方案2 - 只使用非对称加密)
- [方案3 - 双方都使用非对称加密](#方案3 - 双方都使用非对称加密)
- [方案4 - 非对称加密+ 对称加密](#方案4 - 非对称加密+ 对称加密)
- [方案 5 - 非对称加密 + 对称加密 + 证书认证](#方案 5 - 非对称加密 + 对称加密 + 证书认证)
- 完整流程
- 总结
HTTPS的概念
HTTPS 也是一个应用层协议. 是在HTTP 协议的基础上引入了一个加密层.
HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况.
理解HTTPS概念
1.什么是加密
- 加密就是把明文(要传输的信息)进行一系列变换, 生成密文.
- 解密就是把密文再进行一系列变换, 还原成明文.
- 在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为密钥
2. 为什么要加密

所以:因为http 的内容是明文传输的,明文数据会经过路由器、wifi 热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击,所以我们才需要对信息进行加密。
3. 常见加密方法
对称加密
- 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密,特征:加密和解密所用的密钥是相同的
- 常见对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2 等
- 特点:算法公开、计算量⼩、加密速度快、加密效率⾼
非对称加密
- 需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
- 常见非对称加密算法(了解):RSA,DSA,ECDSA
- 特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。
非对称加密要用到两个密钥, 一个叫做"公钥", 一个叫做"私钥".
公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多. - 通过公钥对明文加密, 变成密文
- 通过私钥对密文解密, 变成明文
反着用也可以 - 通过私钥对明文加密, 变成密文
- 通过公钥对密文解密, 变成明文
4. 数据摘要&&数据指纹
- 数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash 函数)对信息进行运算,生成一串固定⻓度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。
- 摘要常见算法:有MD5、SHA1、SHA256、SHA512 等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)
- 摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比
- 应用场景:比如我们云盘的秒传功能
5. 数据签名
- 摘要经过加密,就得到数字签名
HTTPS 的工作过程探究
既然要保证数据安全, 就需要进行"加密".
网络传输中不再直接传输明文了, 而是加密之后的"密文".
加密的方式有很多, 但是整体可以分成两大类: 对称加密和非对称加密
方案1 - 只使用对称加密

方案2 - 只使用非对称加密

方案3 - 双方都使用非对称加密

方案4 - 非对称加密+ 对称加密

中间人攻击
第四种方案看似在效率和安全上可行,但是如果中间人在客户端和服务端进行密钥协商之前就已经进行攻击了呢?例子如下:
引入证书
方案四的问题根本就是client无法确认拿到的公钥是否是合法的,因此我们需要证书机制来解决这个问题
- 服务端在使用HTTPS 前,需要向CA 机构申领一份数字证书,数字证书里含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明服务端公钥的权威性
理解数据签名

当服务端申请CA 证书的时候,CA 机构会对该服务端进行审核,并专⻔为该网站形成数字签名,过程如下:
- CA 机构拥有非对称加密的私钥A 和公钥A'
- CA 机构对服务端申请的证书明文数据进行hash,形成数据摘要
- 然后对数据摘要用CA 私钥A'加密,得到数字签名S(这一步就相当于只有CA有签名的权力,浏览器会内置CA以及相关子机构的公钥,也就是浏览器只认CA的签名)
- 服务端申请的证书明文和数字签名S 共同组成了数字证书,这样一份数字证书就可以颁发给服务端
方案 5 - 非对称加密 + 对称加密 + 证书认证
在客户端和服务器刚一建⽴连接的时候, 服务器给客户端返回一个证书,证书包含了之前服务端的公钥, 也包含了网站的身份信息.
客户端进行认证
客户端拿到证书要进行验证
- 判定证书的有效期是否过期
- 判定证书的发布机构是否受信任
- 验证证书是否被篡改:从系统拿到CA的公钥对数字签名进行解密拿到散列值h1,接着对证书的铭文数据进行hash形成散列值h2,看看h1和h2是否相同就可以得出证书是否被篡改。
中间人有没有可能篡改该证书?
- 中间人篡改了证书的明文
- 由于他没有CA 机构的私钥,所以无法hash 之后用私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名
- 如果强行篡改,客户端收到该证书后会发现明文和签名解密后的值不一致,则说明证书已被篡改,证书不可信,从而终止向服务器传输信息,防止信息泄露给中间人。
中间人整个掉包证书?
- 因为中间人没有CA 私钥,所以无法制作假的证书
- 所以中间人只能向CA 申请真证书,然后用自己申请的证书进行掉包
- 这个确实能做到证书的整体掉包,但是别忘记,证书明文中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。
完整流程

总结
HTTPS 工作过程中涉及到的密钥有三组.
- 第一组(非对称加密): 用于校验证书是否被篡改. 服务器持有私钥(私钥在形成CSR 文件与申请证书时获得), 客户端持有公钥(操作系统包含了可信任的CA 认证机构有哪些, 同时持有对应的公钥). 服务器在客户端请求时,返回携带签名的证书. 客户端通过这个公钥进行证书验证, 保证证书的合法性,进一步保证证书中携带的服务端公钥权威性。
- 第⼆组(非对称加密): 用于协商生成对称加密的密钥. 客户端用收到的CA 证书中的公钥(是可被信任的)给随机生成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥.
- 第三组(对称加密): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密.
- 第一组非对称加密的密钥是为了让客户端拿到第⼆组非对称加密的公钥也就是确认客户端拿到的公钥是合法,是来自服务器的公钥。
- 第⼆组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器.