https
https是在http协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议。
https=http+加密+认证+完整性保护
https交互图:
HTTPS的整体过程分为证书验证和数据传输阶段:
① 证书验证阶段
浏览器发起 HTTPS 请求
服务端返回 HTTPS 证书
客户端验证证书是否合法,如果不合法则提示告警
② 数据传输阶段
当证书验证合法后,在本地生成随机码
通过公钥加密随机码,并把加密后的随机码传输到服务端
服务端通过私钥对随机码进行解密
服务端通过客户端传入的随机码构造对称加密算法,对返回结果内容进行加密后传输
为什么需要CA认证机构颁发证书
假设不存在认证机构颁发证书,任何人都可以制作证书,由于缺少对证书的验证,所以客户端虽然发起的是 HTTPS 请求,但客户端完全不知道自己的网络已被拦截,传输内容被中间人全部窃取。
证书包含的信息包括:颁发机构信息,公钥,公司信息,域名,有效期,指纹等。
证书的合法性依据权威机构,只要是权威机构生成的证书,就认为是合法的。
浏览器如何验证证书的合法性?
浏览器发起 HTTPS 请求时,服务器会返回网站的 SSL 证书,浏览器需要对证书做以下验证:
1.验证域名、有效期等信息是否正确。证书上都有包含这些信息,比较容易完成验证;
2.判断证书来源是否合法。每份签发证书都可以根据验证链查找到对应的根证书,操作系统、浏览器会在本地存储权威机构的根证书,利用本地根证书可以对对应机构签发证书完成来源验证;
3.判断证书是否被篡改。需要与 CA 服务器进行校验;
4.判断证书是否已吊销。通过CRL(Certificate Revocation List 证书注销列表)和 OCSP(Online Certificate Status Protocol 在线证书状态协议)实现,其中 OCSP 可用于第3步中以减少与 CA 服务器的交互,提高验证效率。
以上任意一步都满足的情况下浏览器才认为证书是合法的。
抓包https流量
1.中间人攻击技术:
只要客户端是我们自己的终端,我们授权的情况下,便可以组建中间人网络,而抓包工具便是作为中间人的代理。通常 HTTPS 抓包工具的使用方法是会生成一个证书,用户需要手动把证书安装到客户端中,然后终端发起的所有请求通过该证书完成与抓包工具的交互,然后抓包工具再转发请求到服务器,最后把服务器返回的结果在控制台输出后再返回给终端,从而完成整个请求的闭环。
Fiddler的这种设置全局代理的方式,只对以下几种情况有效:
1.IE、Chrome等浏览器。
2.程序使用Windows提供的WinInet库进行HTTP/HTTPS通信。
3.程序内嵌WebBrowser,比较常用的是IE控件和CEF。
Fiddler之所以能抓到并解密HTTPS包的内容是因为Fiddler使用了中间人攻击的手段,该手段要能成功实施,有一个前提条件,**就是客户端信任Fiddler提供的根证书**。
如果第三方程序使用其它HTTP库进行通信,比如libcurl,JAVA的URLConnection库,C#的System.Net.Http,Python的requests,这些HTTP库一般自带了一套可信任的SSL根证书,它们不使用操作系统自带的SSL根证书,更不会使用我们向操作系统中添加的Fiddler根证书,于是就验证出错了,这时可以通过在请求时禁用证书验证或者在请求时指定自己生成的证书,给目标程序设置Fiddler代理
2.在恶意样本建立连接之前将域名更改为http协议,或者搭建有证书分析环境。