HTTPS工作流程


1. RSA算法

1.1. 特點

RSA的密鑰分成兩個部分:

  • PublicKey

    • 加密數據
    • 驗證簽名
    • 不能解密
    • 任何人都可以獲得
  • Private Key

    • 數據簽名(摘要算法)
    • 解密
    • 加密(不用此功能)
    • 不公開

RSA算法的特點:

  • 公鑰端到私鑰端的通訊是安全的
    • 因為只有私鑰能解密
  • 任何人都可以拿到公鑰給私鑰端發信息
  • 私鑰端給公鑰端回消息不安全
    • 私鑰發的消息公鑰可解密,任何人都可看到
    • 私鑰回的消息可以簽名,保證無法被篡改

1.2. 生產中應用RSA算法

下文中的發消息可以理解為C/S中客戶端,收消息和回消息理解為服務端。

單對RSA密鑰適合場景:

  • 單向發消息和收消息要求絕對安全
  • 回消息要求不能被篡改,內容被別人看到也無所謂

以上滿足以上特點的場景很少,更多時候希望通訊雙方的所有數據都是加密的,並且都雙方都可以解密,而且別人無法破解。這種時候可以使用對稱加密,但是需要雙方都配置好密鑰就好了;如果使用RSA,只利用RSA發消息安全的特點,那么有兩種方式:

方式一:兩對RSA密鑰

  • 思路:兩對RSA密鑰,發消息時都用對方的公鑰。

  • 准備:雙方各生成一對公鑰和私鑰,並把公鑰給對方。

  • 發消息:用對方的公鑰把消息加密發給對方。

  • 收消息:用自己的私鑰解密消息。

  • 回消息:類似發消息,用對方的公鑰發送加密消息。

如果在Client-Server模型應用中使用這種方式步驟為:

  • 服務端開放自己的公鑰
    • 客戶端發送消息給服務端用服務端的公鑰
  • 客戶端生成自己公鑰和私鑰,並把自己的公鑰發給服務端
    • 服務端回消息時候用客戶端的私鑰加密

這種方式是ssh免密登陸的實現,客戶端接受服務端的公鑰放到 ~/.ssh/known_hosts,客戶端再把自己的公鑰配置到服務端的~/.ssh/authorized_keys,這樣就實現了雙向加密通訊。

方式二:RSA+對稱加密

  • 思路:公鑰端發消息時候,對消息再進行一次對稱加密並把密碼發給私鑰端,后續對稱加密通訊
  • 准備:只要收消息一端有RSA密鑰對,發消息一端不需要有自己的密鑰對
  • 發消息:公鑰端把數據對稱加密,然后把加密結果和對稱加密的密鑰用公鑰加密,一起發給私鑰端
  • 收消息:私鑰解密后拿到對稱密鑰和報文,再對報文解密得到明文
  • 回消息:回消息只對稱加密數據然后簽名,公鑰端先驗簽再用公鑰解密

方式二https協議使用方案,也是ssh協議非免密的實現方案。

2. HTTPS協議

http是應用層協議,在tcp協議之上。這兩個協議傳輸的都是明文,tcp之上再加一層安全協議SSL(Security Socket Layer) ,基於這一層實現http得到的就是https。

SSL是安全套接字編程接口,后來又進化為TLS(Transport Layer Security)傳輸層安全,定位類似,都是給TCP協議加密的。不管SSL和TLS都是軟件實現的協議,在TCP/IP 4層模型中,它們也是應用層的。

在上一章,我們知道https同時利用了rsa和對稱加密方法,通訊流程為:

  • 步驟1:客戶端請求服務端的證書

    • 這一步被攔截、篡改了也沒問題,因為只是通訊前的准備工作
  • 步驟2:服務端給客戶端發送證書

    • 客戶端收到證書后驗真,如果OK,就有服務端的公鑰了
    • 證書是公開的,被攔截了也沒問題
    • 如果被篡改成假證書,並且客戶端驗證通過就不安全了
      • 客戶端用假證書的公鑰加密並發送,被攔截后可以被跟假公鑰配對的私鑰破解
      • 證書必須由專業結構(CA)發放
        • 發放機構對證書所有者審核
        • 如果使用假證書破解就可以根據家假證書找到破解者
  • 步驟3:客戶端生成對稱密鑰並用公鑰發送給服務端

    • 客戶端記錄下來生成的密鑰
  • 步驟4:服務端解析出對稱密鑰並存儲

  • 步驟5:客戶端使用對稱密鑰加密數據發送

  • 步驟6:服務端使用對稱密鑰解密數據,並把響應數據用對稱密鑰加密

rsa的主要作用:

  • 客戶端與服務器之間約定對稱密鑰

對稱加密的作用:

  • http報文安全傳輸

SSL證書包含的信息:

  • 證書的發布機構CA(Certificate Authoritie)
  • 證書的有效期
  • 公鑰
  • 證書所有者
  • 簽名

證書最主要的作用就是存儲服務器的公鑰,並且保證服務器的的公鑰是安全有效的,整個https安全的核心也是基於證書發放機構絕對安全。如果客戶端拿着一個假的證書用了一個假的rsa 公鑰,並且加密了發送,那這個假的公鑰所對應的私鑰就可以解密數據了。證書的真假只有靠證書的發放結構去驗證,選擇一家靠譜的發布機構很重要。

3. 使用

服務端

因為服務端要接受並解密數據,服務端要有rsa的公鑰和私鑰,對稱加密的密鑰是客戶端動態生成的,所以我們生成一對密鑰然后放到一個支持https的服務器上就完成了部署。

具體操作請參考 :

https://aotu.io/notes/2016/08/16/nginx-https/index.html

客戶端

客戶端要有接受服務端證書並驗證證書的能力,但是如果我們的網絡是內網部署就沒法驗證服務端發送過來的證書了。那可以預先把證書放到客戶端,如果服務器發來的證書是我們信任的,那么就可以給它發對稱密鑰並通信。

具體操作請參考:

https://www.cnblogs.com/duanxz/p/5146340.html

4. 參考

HTTPS系列干貨(一):HTTPS 原理詳解

RSA加密、解密、簽名、驗簽的原理及方法

SSH協議(1)-工作原理及過程


免責聲明!

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



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