https协议比http安全、它传输的是加密的数据,一般不容易被拦截破解,但更耗时、对CPU消耗也更大,下面通过Tcpdump抓包,用Wireshark分析分别使用两种协议请求同一个网页的报文,对比两者的报文对这两个协议的区别便一目了然了。
1、环境搭建
测试服务器上Nginx开放80与443端口监听,并对443端口配置CA证书(注:自已用openssl工具生成的CA证书无效,需要有资质机构颁发的证书。
server {
listen 443 ssl;
ssl_certificate /etc/nginx/cert/5490205__vanmilk.com.pem;
ssl_certificate_key /etc/nginx/cert/5490205__vanmilk.com.key;
}
2、Http报文分析
在服务器上监听从客户机118.178.255.158发送过来的请求报文。
tcpdump -n -S -ieth0 host 118.178.255.158 -w http.pcap
用Wireshark打开http.pcap报文如下图,总共有10条报文:
说明
Seq:表示发送方这个包第一位在datastream中的位置,对于没有数据传输的 ???? ACK在下一次实际有数据传输时依旧从上一次发送ACK数据包的Seq开始。 Ack:期望对方下一次Seq是多少。 SYN/FIN的传输虽然没有Data,但会让下一次传输的packetSeq加一, 但是Ack的传输不会让下一次传输的PacketSeq加一
三次握手
#1: Client->Server [SYN] CSeq=0
#2: Server->Client [SYN+ACK] SSeq=0,Ack=1 对#1的Ack
#3: Client->Server [ACK] CSeq=1,Ack=1 对#2的Ack
数据传输
#4:Client->Server GET / CSeq=1,Ack=1 HTTP
#5: Servier->Client [ACK] SSeq=1,Ack=116
#6: Server->Client SSeq=1,Ack=116 HTTP明文数据
#7: Client->Server [ACK] CSeq=116,Ack=860
四次挥手(有两次被合并成一个Packet)
#8: Client->Server [FIN+ACK] CSeq=116,Ack=860
#9: Server->Client [FIN+ACK] SSeq=860,Ack=117 对#8的Ack
#10: Client->Server [ACK] CSeq=117,Ack=861 对#9的Ack
3、https报文分析
tcpdump -n -S -ieth0 host 118.178.255.158 -w https.pcap
用Wireshark打开https.pcap报文如下图,总共有14条报文.
三次握手
#1 Client->Server [SYN]
#2: Server->Client [SYN+ACK]
#3: Client->Server [ACK]
TLS握手
#4: Client->Server [Client Hello] TLS
#5: Server-Client [ACK]
#6:Server-Client Server Hello 、Certificate、Server Key Exchange、Server Hello Done TLS
响应Client Hello消息,然后向客户端下发证书(CA公钥)
#7: Client->Server [ACK]
Client验证证书合法性,并使用CA公钥对随机码加密
#8: Client->Server Client Key Exchange,Change Cipher Spec,Encrypted Handshake Message TLS
上传客户端生成的加密的随机码
#9: Server->Client New Session Ticket、Change Cipher Spec、Encrypted Handshake Message TLS
Server用私钥解密随机码,随后使用随机码对传输的数据进行加解密
?数据传输
使用对称加密算法加密数据(每一次连接生成不同的随机密码)
#10:Client->Server Application Data TLS
#11: Server->Client Application Data TLS
四次挥手
#12: Client->Server [FIN+ACK]
#13: Server->Client [FIN+ACK]
#14: Client->Server [ACK]
4、https数据伟输过程(网上找的图片,比较详细)
?
|