https介绍
https(Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道.
可以理解为http的安全版,在http(应用层)加入了ssl/tls(安全层).
TLS(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性.
SSL(Secure Socket Layer,安全套接字层)位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层. SSL通过互相认证,使用数字签名确保完整性,使用加密确保私密性,以实现客户端和服务器之间的安全通讯.
https默认使用443端口,而http默认使用80端口.
https服务器需要部署证书和私钥.
数字证书由CA(Certificate Authority)机构进行颁发,包括持有人相关信息,有效期,数字签名,服务器公钥,指纹.
非对称加密用于生成双方约定的对称加密密钥,数据通信使用对称加密.
证书合法性验证
客户端验证证书的有效期,颁发机构,是否被吊销等验证,这些验证只是基础验证不能防止证书被篡改.
数据证书防篡改验证
指纹,CA机构将相关信息通过单向加密生成指纹(sha-1,sha-256).
签名,CA机构用其提供的私钥对指纹进行非对称加密生成签名.
验签,客户端用数字证书提供的公钥,再用相同的签名算法(如:SHA-384的ECDSA)进行验签,如果指纹相同则信任.
ssl握手
PMS(预主密钥),使用服务端公钥加密的预主密钥. MS(主密钥).
ssl加密通信
报文结构
分层 | 内容 | 格式 |
应用层 | http报文 | http首部字体,主体数据 |
传输层 | tcp报文 | tcp首部字体(端口号),http报文 |
网络层 | ip数据包 | ip首部字体(ip地址),tcp报文 |
数据链路层 | 以太网数据帧 | 以太网首部(mac地址),ip数据包 |
TCP三次握手
指令 | 含义 |
URG | 紧急指针是否有效。为1,表示某一位需要被优先处理 |
ACK | 确认号是否有效,一般置为1。 |
PSH | 提示接收端应用程序立即从TCP缓冲区把数据读走。 |
RST | 对方要求重新建立连接,复位。 |
SYN | 请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1 |
FIN | 希望断开连接。 |
Seq(Sequence number),序号 Ack(Acknowledgment number),确认号
用wireshark查看相关信息,先发一次请求,号码使用相对大小.
在Statistics=>Flow Graph
TCP四次挥手
为什么连接为三次,而挥手为四次
关闭连接时,需要等待数据报文全部传送完成,所以先应答(ACK),传输完成后,再(FIN).
TIME-WAIT为什么要等2MSL(最大报文段生存周期)
时间的大小为一个来回,主要是为了确保对方收到(ACK),如果对方再次发送(FIN)指令说明没有收到,这时可以再次发送(ACK),的不然再继续等.
但如果是短连接,服务器主动关闭,当并发量大的时候可能会出现大量的TIME-WAIT. 可以考虑减少等待时间,或者端口重用.
https抓包
用Charles抓包https.
抓取电脑https包
电脑安装Charles证书
Help -> SSL Proxying -> Install Charles Root Certificate
如果没有权限的话,先Export Charles 的证书和私钥,用钥匙串访问手动打开安装,
在Mac应用中,"钥匙串访问",找到"Charles Proxy CA",
"信任"->"使用此证书时"->"始终信任",
设置SSL Proxying Settings,添加*:443
勾选macOS Proxy即可抓取https包
抓取手机https包
Help -> SSL Proxying -> Install Charles Root Certificae on a Mobile Device or Remote Browser
证书下载地址:chls.pro/ssl
提示无法安装,没有可用证书,是因为权限问题.
在电脑端打开,证书下载地址,然后传到手机端(如用钉钉),
不要直接打开,找到证书所在目录,然后点击它就可以安装证书了.
代理设置
Proxy Settings设置Port如8888.
手机wifi手动设置代理,同一个局域网中电脑的ip地址,端口填刚才设置的8888,即可.
请求劫持
在Breakpoints Settings里添加接口断点,可以拦截请求和响应,在调试的时候挺好用的.