HTTPS 简介
HTTPS = HTTP(明文传输) +SSL(Secure Sockets Layer 安全套接层)
HTTP由于其明文传输的特点所有存在窃听风险、篡改风险以及冒充风险(此三个风险的介绍可参见:https://baijiahao.baidu.com/s?id=1685474345600994715&wfr=spider&for=pc),HTTPS就是为了解决上述三个风险而生的,实现了安全通信的四个原则: 机密性、完整性,身份认证和不可否认。
- 机密性:即对数据加密,解决了窃听风险,因为即使被中间人窃听,由于数据是加密的,他也拿不到明文;(加密方式解决的问题,重点是保证密钥的安全)
- 完整性:指数据在传输过程中没有被篡改,不多不少,保持原样,中途如果哪怕改了一个标点符号,接收方也能识别出来,从而判定接收报文不合法;
- 身份认证:确认对方的真实身份,即证明“你妈是你妈”的问题,这样就解决了冒充风险,用户不用担心访问的是某宝结果却在和钓鱼网站通信的问题;(CA证书解决这个问题,具体CA的简要解释可参见:https://blog.csdn.net/weixin_45630387/article/details/139274590)
- 不可否认: 即不可否认已发生的行为,比如小明向小红借了 1000 元,但没打借条,或者打了借条但没有签名,就会造成小红的资金损失。(数字签名解决这个问题,简要说明依旧可参考:https://blog.csdn.net/weixin_45630387/article/details/139274590)
HTTPS的最终加密形式是对称加密,所以关键是保证对称加密的秘钥能够安全的传递。
HTTPS 通信过程
- 客户端向服务器发送https请求,请求包含SSL协议版本号、加密算法种类、随机数等信息
- 服务端收到https请求,给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的CA证书
- 客户端验证公钥,不通过验证则发出警告,通过验证则产生一个随机的客户端私钥(简单描述一下验证过程:确定颁发证书的CA机构是可信任的,所以这个可信任的CA机构向客户端担保服务器是可靠的不是什么野站,客户端就信了(
你信CA,CA信服务器->你信服务器 接下来需要证明的是CA信的这个服务器是现在跟你叭叭的服务器
)。另外这个CA证书里还有CA信任的服务器的信物(能解开私钥加密信息的公钥和服务器相关信息),你拿着信物跟服务器发过来的另一半信物(私钥加密的服务器相关信息)一比对,诶你俩这是一对,然后客户端和服务器就接头成功(暗号成立,你(现在跟客户端叭叭的服务器)就是他(CA信任的那个服务器)
)。
验证内容:- 发行服务器证书的CA是否可靠
- 服务端的证书是否过期
- 返回的公钥是否能正确解开返回证书中的数字签名
- 服务器证书上的域名是否和当前服务器的域名相匹配
- 接头成功,客户端告诉服务器自己支持啥加密方式,让服务器选一个(此时是对称加密算法)
- 服务器选加密方式
- 服务器告诉客户端咱以后就用这个加密方式(我猜一下为啥不继续用之前的公私钥而要换成对称加密:maybe 1.复杂的多,消耗资源大 2.服务器的公钥是散给所有客户端的,所有人都跟服务器这么聊服务器不知道谁是谁)
- 客户端收到服务端的方案后,产生随机码,用作通信过程中对称加密的密钥,使用服务端的公钥将客户端自己的密钥进行加密,返回给服务端
- 服务端接收到后用自己的私钥进行解密,获取客户端的对称密钥
- 服务端和客户端使用客户端的对称密钥进行加密通信
burpsuite 劫持https原理
先放一张劫持过程图:
图中,CA证书被简化成了公钥和私钥,所以是说的通的,然而事实上https还会有证书的校验,有这证书burpsuite很难把这服务器的公钥换成自己的公钥啊,所以实际过程应该是是把整个证书都换掉。
那么问题来了,把证书换掉了,那不就没有CA签名了?也通不过验证。
是的,所以众所周知,想要burpsuite劫持https就需要先在客户端导入一个证书,这个burpsuite的自签证书会向客户端证明burpsuite是可信任的。
欲知详情,可参见:https://www.cnblogs.com/binye/articles/10925319.html
NIDS解析https原理
NIDS((network intrusion detection system) - 网络入侵检测系统
它只做检测不做防御,所以一般是旁挂的,肯定跟burpsuite这种横插一脚的不一样,人家是正经做了个流量镜像而已
那么很多的NIDS其实是有解密部分https流量的功能的,它是怎么做到的呢?
此时就只有一种方法可解了,直接服务器公私钥都给它,那所有流量它都能解,所以一般如果NIDS需要对https进行解析的话就需要将对应待检测服务器的公私钥都导入。