转自:https://www.jianshu.com/p/bf58cf32dd9d
https://www.cnblogs.com/jtlgb/p/6760679.html
https请求验证流程
客户端发起https请求
用户发出一个https请求, 连接到服务端的443端口
服务端的配置
采用https协议的服务器必须要有一套数字证书, 可以自己制作, 也可以向相关组织申请, 区别就是自己颁布的证书需要客户端验证通过, 才可以继续访问, 而使用受信任的组织申请的证书则不会弹出提示页面
传送证书(公钥)
这个证书其实就是公钥(其实这个就是非对称加密产生的公钥), 包含了很多信息, 如证书的颁发机构, 过期时间等.
客户端解析证书
这里是由客户端的SSL(TSL)来完成的, 首先会检验公钥是否有效, 如果发现异常, 则会弹出一个警告框, 提示证书存在问题, 如果证书没有问题那么就生成一个随机值(对称加密生成的私钥), 然后使用证书对该随机值进行加密(使用非对称产生的公钥加密对称加密生成的私钥保证了私钥的安全性).
传送加密信息
这里传送的是用证书加密后的随机值, 目的就是让服务端得到这个随机值(服务端获取到和客户端一样的私钥), 以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了.
服务端解密信息
服务端使用生成证书时产生的私钥解密, 得到了客户端传来的随机值(对称加密产生的私钥), 然后把响应内容通过该随机值进行对称加密. 这样服务端和客户端都有私钥, 就能进行加密和解密了.
传输加密后的信息
这部分信息是服务端使用私钥加密后的信息, 可以在客户端利用私钥被还原.
客户端解密信息
客户端使用之前生成的私钥来解密服务端传来的加密信息, 获取正确内容, 整个过程第三方即使获取了数据, 也无法解密.
HTTPS常见攻击方式:
降级攻击(SSL剥离攻击)
解密攻击(明文, 证书伪造)
协议漏洞, 实现方法的漏洞, 配置不严格
ps: 关于HTTPS也可以被charles抓包获取被加密的数据的问题, 这个是由于客户端本身安装了伪造的证书, 相当于是中间人攻击, 这个问题, 就是用户问题, 无法去避免的.
中间人攻击
之所以可以攻击,是因为客户端信任的证书的合法性,然后从证书里面获取到公钥对自己随机生成的密钥进行加密,而抓包工具是知道私钥的,可以解密拿到随机的密钥
- 客户端安装伪造证书
- 中间人主要是为了获取对称加密的密钥,
总结: - 服务器 用RSA生成公钥和私钥
- 把公钥放在证书里发送给客户端,私钥自己保存
- 客户端首先向一个权威的服务器检查证书的合法性,如果证书合法,客户端产生一段随机数,这个随机数就作为通信的密钥,我们称之为对称密钥,用公钥加密这段随机数,然后发送到服务器
- 服务器用密钥解密获取对称密钥,然后,双方就已对称密钥进行加密解密通信了
解决方案:代码层面,使用公钥去解密 第三方用户信任的证书,因为证书的私钥中间人是不知道的