https傳輸流程(加密方式、證書、傳輸安全)


http的缺點

http的數據是明文傳輸

如果用明文傳輸 很容易被第三方獲取到傳輸的數據 因此我們一般要在網絡傳輸過程中對數據進行加密

常見的加密方式

對稱加密

秘鑰key 待加密數據data

a和b是兩個主機,它們都有秘鑰key ,

a傳輸data會先用key進行加密,生成密文DATA,

b拿到DATA后再用key解密,獲取到data

 

問題: key可能被第三方獲取,從而得到原數據data

非對稱加密

公鑰publick_key 私鑰private_key 可以公鑰加密,私鑰解密,也可以私鑰加密,公鑰解密

a第一次請求,b給a返回公鑰,

a第二次請求,給b傳輸用公鑰加密后的密文DATA,

b收到后 用私鑰解密DATA,拿到原數據data

 

 

由於私鑰只有b才擁有,因此第三方無法獲取私鑰,自然無法對加密數據進行解密

問題:如果b向a發送數據的話 如果用公鑰加密 但a沒有私鑰 所以無法解密 ;如果用私鑰加密,a用公鑰解密,但是第三方也能拿到公鑰。

 

既然都不行,那該怎么解決呢?

對稱加密+非對稱加密

  • 先使用非對稱加密 得到公鑰 再利用公鑰生成一個傳輸秘鑰 進行雙方的數據傳輸
  • client第一次請求,server給client返回公鑰,
  • client拿到公鑰,再生成一個隨機字符串,使用公鑰對這個字符串進行加密,傳給server
  • server收到后 用私鑰解密出字符串,這個字符串用來作為之后雙方進行數據傳輸的對稱秘鑰

 

問題: 中間人攻擊
在client 向server請求公鑰時 中間人攔截請求 並向client發送自己的公鑰 因此中間人就可以在之后的傳輸過程中查看和篡改數據

 

中間人攻擊的產生原因以及如何避免?

產生原因: 無法確認server的身份

需要有CA(證書頒發機構)對網站身份進行認證

申請證書

服務端將域名和公鑰傳給CA CA有自己的公鑰和私鑰,然后給服務端下發證書。

證書的內容主要有: 域名, 證書頒發機構相關信息, 用CA私鑰加密過后的服務器公鑰, 用CA私鑰加密過后證書簽名。

服務器會用CA公鑰解密,獲取證書簽名 ,

證書簽名是由服務器域名 + CA公鑰 + 服務器公鑰,通過hash算法加密而成的一段信息

證書簽名用來驗證是否被篡改

服務器收到證書,會用域名、 CA公鑰、 自己公鑰生成一個簽名 檢查該簽名是否和證書的簽名一致 一致則說明沒有被篡改

 

https傳輸流程

  • client向server發起請求 ,server先返回一個證書
  • 由於client的操作系統中存有ca的公鑰 因此可以對證書的密文進行解密,獲取到服務器的公鑰和證書簽名。
  • client驗證證書簽名 也就是用證書上的域名 + CA公鑰 + 服務器公鑰用hash算法進行加密 把加密結果和證書簽名進行對比 若結果一致 就證明證書簽名沒有被篡改 沒有被篡改的話 client就可以生成一個隨機字符串
  • 隨機字符串用服務器公鑰進行加密,傳給server
  • server收到后解密拿到隨機字符串,作為之后雙方傳輸數據的公鑰

如果client獲取到的證書是沒有認證的 網頁就會提示證書是不安全的

 

https傳輸過程中能否被篡改?

1.中間人能否篡改證書的公鑰和證書簽名?

由於每個CA公鑰是公開的,所以中間人也有,能夠揭秘獲取到服務器公鑰和證書簽名,中間人如果想修改這兩個數據,則需要用中間人自己的私鑰進行加密,但是client會用CA公鑰解密,自然是解不開的,所以無法篡改。

 

2.中間人能否篡改證書的域名?

驗證簽名的過程會出錯,因為client需要將域名、 CA公鑰、 自己公鑰用hash算法生成一個簽名,再和證書上的簽名對比,此時發現不一致,則說明域名、 CA公鑰、 自己公鑰被篡改過了。

 

3.中間人能否在client請求證書時就攔截,並返回一個中間人自己的證書?

其實是可以的,但需要得到client的同意,信任此證書才行。這也是抓包工具可以截取到https傳輸過程中數據的原因。但也會有第三方利用這一點,出現個彈窗誘導用戶點擊,就可以給client植入“木馬病毒”,這樣就能獲取和篡改client和server的數據。

 

大家如果對木馬感興趣的話,之后會准備下知識點,詳細介紹一下~~

 


免責聲明!

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



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