https プロトコルは http よりも安全です。暗号化されたデータを送信します。一般に、傍受されたり解読されたりするのは簡単ではありません。ただし、時間がかかり、CPU の消費量も多くなります。次は、Tcpdump を通じてパケットをキャプチャし、Wireshark を使用します。両方のプロトコルを使用して同じリクエストを分析するには、Web ページのパケットと 2 つのパケットを比較すると、2 つのプロトコルの違いは一目瞭然です。
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:データ ストリーム内の送信者のパケットの最初のビットの位置を示します。
データ送信のない ACK の場合、次回実際にデータ送信があるときも、最後に送信された ACK データ パケットの Seq から開始されます。
Ack:相手の期待される次の Seq は何ですか。
SYN/FIN の送信には Data がありませんが、次の送信の PacketSeq は 1 増加しますが、
Ack の送信では次の送信の PacketSeq は増加しません。
3回の握手
#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
4 つのウェーブ (2 つは 1 つのパケットにマージされました)
#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 を使用して、以下に示すように http.pcap メッセージを開きます。メッセージは合計 14 個あります。
3回の握手
#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
4回手を振る
#12: Client->Server [FIN+ACK]
#13: Server->Client [FIN+ACK]
#14: Client->Server [ACK]