HTTPS 交互流程


 

  https 與 http 區別在於 https 比 http多了一個SSL加密層。就是 client端 發送給 server端 的請求報告是經過加密,混淆的。以此來保護我們的數據在網絡傳輸中的安全。

 

 

  ok, 我們來看一下 client 發送給 server 是如何交互的,為什么能保證數據在網絡中的安全。

  • 時序圖:

流程解釋:

  • 客戶端訪問:https://www.z.com
  • https的監聽端口是443端口,比如nginx服務器,nginx.conf 會有如下配置(簡略配置)
server
 {
   listen       443;# https 監聽的是 443端口
   server_name  www.z.com;
 
   ssl on;
   ssl_session_cache   shared:SSL:10m;
   ssl_session_timeout 10m;
 
   ssl_certificate /etc/nginx/ssl_key/z.crt.crt; # 公鑰
   ssl_certificate_key /etc/nginx/ssl_key/z.crt.key; # 私鑰

}

  nginx 會根據上面配置的ssl_certificate 的路徑 /etc/nginx/ssl_key/z.crt.crt 找到www.z.com 域名證書的公鑰,將公鑰返回給客戶端

  • 客戶端接收到公鑰后,會對公鑰內容進行解析,校驗
  • 校驗通過后,客戶端會隨機生成一個randomKey(隨機秘鑰)
  • 客戶端再使用z.crt.crt中的公鑰,對 randomKey 進行加密,將加密后的內容發送給服務端
  • 服務端接收報文后,使用z.crt.key 中的私鑰,對加密的內容的進行解密,然后得到 randomKey 
  • 這時,服務端會將請求域名的響應結果,使用 randomKey  進行加密,返回客戶端
  • 客戶端對 服務端的加密報文使用randomKey  解密,然后就可以展示在瀏覽器上

 

  通過上面的分析可以知道,https對在網絡傳輸中的數據進行加密,防止別人抓包可以明文的看到你的內容。有些朋友說https 不安全,更多的是說那些不懷好意的人在client客戶端上動了手腳,並不是說抓包,然后解密報文。

我們知道后面正常的交互都是通過randomKey來進行加解密的。而randomKey 在網絡中的傳輸只有一次,並且這一次還是使用了z.crt.crt中的公鑰進行加密,想要解密只能使用z.crt.key中的私鑰,而私鑰又是在server端服務器上。

要是能直接進入別人服務器 或 控制別人客戶端,那也不用費那么大勁兒抓包破解了。

 

以上內容僅代表個人觀點,如有錯誤請指出,立馬改正


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM