HTTPS
目录
因为HTTP协议内容均是按照文本的方式进行明文传输的,这就导致在传输过程中很容易出现一些信息被篡改的情况。HTTPS协议通过在HTTP协议的基础上引入了一个加密层解决了这个问题。
1.HTTP协议的缺点
因为HTTP协议只规定了数据如何通过浏览器进行传输,并没有对这些传输的数据设定一些安全措施,这就导致了这些数据是裸奔在网络中的。这些明文传输的数据会经过路由器,WiFi热点,通信服务运营商,代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就会完全暴露。劫持者甚至可以篡改传输的信息不被发送,接受双方察觉,形成“中间人攻击”,所以我们必须要采取一种方式对http运输的数据进行加密。
想必大家都曾遇到过一种情况,就是早些年在上网的时候,我们在某些网站下载一些软件,明明想下载的是某某音乐软件,但是当下载完成之后却发现给你下载的是某某游戏盒子,这就是HTTP请求被拦截的一种典型情况,一些黑客也可以用类似的手段在窃取用户隐私信息或者篡改内容,所以在互联网上明文传输是一件很危险的事!
2.常见的加密方式
加密方式可以分为很多种,整体上可以分成对称加密和非对称加密两大类,下面对这两种加密方式分别介绍:
对称加密
- 采⽤单钥密码系统的加密⽅法,同⼀个密钥可以同时⽤作信息的加密和解密,这种加密⽅法称为对称加密,也称为单密钥加密,特征:加密和解密所⽤的密钥是相同的。
- 常见对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2等。
- 特点:算法公开、计算量⼩、加密速度快、加密效率⾼。
对称加密其实就是通过同⼀个 "密钥" , 把明⽂加密成密⽂, 并且也能把密⽂解密成明⽂.
非对称加密
- 需要两个密钥来进⾏加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥 (private key,简称私钥)。
- 常见非对称加密算法(了解即可):RSA,DSA,ECDSA
- 特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,⽽使得加密解密速度没有对称加密解密的速度快。
非对称加密要⽤到两个密钥, ⼀个叫做 "公钥", ⼀个叫做 "私钥",公钥和私钥是配对的。
通过公钥对明⽂加密, 变成密⽂;通过私钥对密⽂解密, 变成明⽂。
3.HTTPS工作完整流程
HTTPS通过非对称加密+对称加密+证书认证的方式实现加密策略的。
什么是证书呢?
服务器在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里可以获取公钥,证书就如同身份证,证明服务器公钥的权威性。
证书可以理解成是⼀个结构化的字符串, 里面包含了以下信息: • 证书发布机构 • 证书有效期 • 公钥 • 证书所有者 • 签名 等。需要注意的是:申请证书的时候,需要在特定平台⽣成查,会同时⽣成⼀对⼉密钥对⼉,即公钥和私钥。这对密钥对儿就是用来在网络通信中进行明⽂加密以及数字签名的。
其中公钥会随着CSR文件,⼀起发给CA进行权威认证,私钥服务端自己保留,⽤来后续进⾏通信(其实主要就是用来交换对称秘钥)。
下面是HTTPS协议的具体工作流程图:
其中HTTPS工作过程中涉及到的密钥有三组:
第⼀组(⾮对称加密): ⽤于校验证书是否被篡改. 服务器持有私钥(私钥在形成CSR⽂件与申请证书时获得), 客⼾端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器在客⼾端请求是,返回携带签名的证书. 客⼾端通过这个公钥进⾏证书验证, 保证证书的合法性,进⼀步保证证书中携带的服务端公钥权威性。
第⼆组(⾮对称加密): ⽤于协商⽣成对称加密的密钥. 客⼾端⽤收到的CA证书中的公钥(是可被信任的)给随机⽣成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥。
第三组(对称加密): 客⼾端和服务器后续传输的数据都通过这个对称密钥加密解密。
其中⼀切的关键都是围绕这个对称加密的密钥. 其他的机制都是辅助这个密钥⼯作的.
- 第⼆组⾮对称加密的密钥是为了让客⼾端把这个对称密钥传给服务器.
- 第⼀组⾮对称加密的密钥是为了让客⼾端拿到第⼆组⾮对称加密的公钥.
4.HTTPS流程中常见面试题
1.中间人有没有可能篡改该证书?
- 由于他没有CA机构的私钥,所以⽆法hash之后⽤私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名
- 如果强行篡改,客户端收到该证书后会发现明⽂和签名解密后的值不⼀致,则说明证书已被篡改,证书不可信,从而终⽌向服务器传输信息,防止信息泄露给中间⼈
2.中间人整个掉包证书?
- 因为中间⼈没有CA私钥,所以⽆法制作假的证书。
- 所以中间⼈只能向CA申请真证书,然后用自己申请的证书进⾏掉包。
- 这个确实能做到证书的整体掉包,但是别忘记,证书明⽂中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。
- 永远记住:中间⼈没有CA私钥,所以对任何证书都⽆法进⾏合法修改,包括自己的。