跳至主要內容

https协议

Moments大约 6 分钟PHPPHP

https协议

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里添加接口断点,可以拦截请求和响应,在调试的时候挺好用的.

上次编辑于:
贡献者: Moments