Https的介紹和使用

簡介

超文本傳輸安全協議(英語:Hypertext Transfer Protocol Secure,縮寫:HTTPS,常稱爲HTTP over TLS,HTTP over SSL或HTTP Secure)。
SSL,Secure Sockets Layer 的縮寫,1994年由網景設計的,1999 年,互聯網標準化組織接替網景公司,發佈了 Transport Sockets Layer 即 TSL。
所謂 HTTPS 就是在 TCP 傳輸層和 HTTP 應用層之間加入了 TSL/SSL 層,用於加密和解密。html

加密

  • 對稱加密python

    對稱加密是一種最簡答,也最快的加密解密方式。對稱,即加密和解密都是用的相同的祕鑰。常見的對稱加密方法有 DES、3DES、AES、RC五、RC6 等。 https 的傳輸階段就是採用對稱加密的 http 傳輸。
  • 非對稱加密nginx

    加密和解密須要兩個不一樣的祕鑰。通常分爲公鑰和私鑰,公鑰用於加密,可以提供數字簽名的功能,能夠任意向外發布;私鑰只有持有者保管,經過公鑰加密的密文在不安全的網絡上傳輸,只有私鑰持有者能夠解開得到明文(即便得到了密文和公鑰,也沒法數以年記的時間內解開)。常見的非對稱加密算法有 RSA、ElGamal、揹包算法、Rabin、迪菲-赫爾曼算法、橢圓曲線加密算法。 https 的握手階段是採用的是非對稱加密。

數字證書

  • wiki定義web

    用於公開密鑰基礎建設的電子文件,用來證實公開密鑰擁有者的身份。此文件包含了公鑰信息、擁有者身份信息(主體)、以及數字證書認證機構(發行者)對這份文件的數字簽名,以保證這個文件的總體內容正確無誤。電腦系統或其餘用戶能夠經過必定的程序覈實證書上的內容,包括證書有否過時、數字簽名是否有效,若是信任簽發的機構,就能夠信任證書上的密鑰,憑公鑰加密與擁有者進行可靠的通訊。算法

  • 申請數字證書ubuntu

    服務端經過非對稱加密算法生成一對公鑰和私鑰,向 Certificate Authority 即證書認證中心,簡稱 CA 提供擁有者身份信息和服務端公鑰,經過後 CA 會頒發包含服務端公鑰,擁有着身份信息和使用 CA 私鑰對證書內容的摘要進行加密的密文,即數據簽名。安全

  • 如何確認數字證書有效服務器

    1. 驗證證書是否有效網絡

      客戶端經過查看證書的有效時間,以及域名等來判斷內容是否有效。
    2. 驗證證書是否可信session

      客戶端經過預存的相對應的 CA 根證書的公鑰,對數字簽名進行解密獲取證書的摘要與經過對證書內容進行哈希運算獲得的摘要進行對比,相等的話則證實數字證書是該 CA 頒發的是可信的。不相等,則客戶端會提示證書不可信。

原理

開始加密通訊以前,客戶端和服務器首先必須創建鏈接和交換參數,這個過程叫作握手handshake
假定客戶端叫作愛麗絲,服務器叫作鮑勃,整個握手過程能夠用下圖說明。
選自CloudFlare
握手階段分紅五步。

  1. 愛麗絲給出協議版本號、一個客戶端生成的隨機數Client random,以及客戶端支持的加密方法。

  2. 鮑勃確認雙方使用的加密方法,並給出數字證書、以及一個服務器生成的隨機數Server random

  3. 愛麗絲確認數字證書有效,而後生成一個新的隨機數Premaster secret,並使用數字證書中的公鑰,加密這個隨機數,發給鮑勃。

  4. 鮑勃使用本身的私鑰,獲取愛麗絲髮來的隨機數,即Premaster secret

  5. 愛麗絲和鮑勃根據約定的加密方法,使用前面的三個隨機數,生成對話密鑰 session key,用來加密接下來的整個對話過程。

爲何必定要用三個隨機數來生成對話密鑰,咱們來看下面的解釋

不論是客戶端仍是服務器,都須要隨機數,這樣生成的密鑰纔不會每次都同樣。因爲SSL協議中證書是靜態的,所以十分有必要引入一種隨機因素來保證協商出來的密鑰的隨機性。

對於RSA密鑰交換算法來講,Premaster secret自己就是一個隨機數,再加上hello消息中的隨機,三個隨機數經過一個密鑰導出器最終導出一個對稱密鑰。
Premaster secret的存在在於SSL協議不信任每一個主機都能產生徹底隨機的隨機數,若是隨機數不隨機,那麼cPremaster secret就有可能被猜出來,那麼僅適用 Premaster secret 做爲密鑰就不合適了,所以必須引入新的隨機因素,那麼客戶端和服務器加上Premaster secret 三個隨機數一同生成的密鑰就不容易被猜出了,一個僞隨機可能徹底不隨機,但是是三個僞隨機就十分接近隨機了,每增長一個自由度,隨機性增長的可不是一。

部署

Let's Encrypt 是一個免費的,自動化的,開放的 CA 機構。經過 certbot ,選擇相應的web服務和服務器版本,就能夠很快的安裝 nginx 的插件和證書。下面以 ubuntu 和 nginx 爲例。

  • 安裝源及軟件

    $ sudo apt-get update
    $ sudo apt-get install software-properties-common
    $ sudo add-apt-repository ppa:certbot/certbot
    $ sudo apt-get update
    $ sudo apt-get install python-certbot-nginx
  • 安裝證書

    $ sudo certbot --nginx certonly # 不加 certonly,能夠自動配置 nginx,省略下一步
  • 配置 NGINX
    在相應的 server 模塊中加入以下配置

    { 
    #省略部分配置...;
    listen 443;
    ssl on; 
    ssl_certificate /path/to/server.crt; # 證書路徑
    ssl_certificate_key /path/to/server.key; # 私鑰路徑
    }
  • 從新生成證書

    $ sudo certbot renew --dry-run

參考

wikipedia https
wikipedia ssl/tsl
SSL/TLS協議運行機制的概述
圖解SSL/TLS協議

相關文章
相關標籤/搜索