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端服務器上。
要是能直接進入別人服務器 或 控制別人客戶端,那也不用費那么大勁兒抓包破解了。
以上內容僅代表個人觀點,如有錯誤請指出,立馬改正