來一次https原理到配置“一條龍”

Gladyu發表於2019-03-01

前言

無論你是要看小姐姐/小哥哥,還是關注國家大事,想要第一時間掌握新鮮資訊和最新動態,網路都會成為你的第一選擇。而網路協議中的httphttps是我們最見到的。

為什麼要使用https代替已有的http?

先說一下http的隱患

  • http是明文傳輸的,內容很容易被監聽,竊聽風險
  • 不驗證通訊方的身份,可以偽裝身份,冒充風險
  • 無法證明報文的完整性,可能被篡改,篡改風險

這些隱患可不只是說說而已,你遇到過運營商劫持嗎?三天兩頭給你插一段廣告還有其他很噁心的操作,防不勝防。正是因為這些隱患才成了某些黑心商的沃土。

再來看一下國際趨勢

為鼓勵https部署

  • Google 已調整搜尋引擎演算法,讓採用https 的網站在搜尋中排名更靠前
  • Chrome 瀏覽器已把http協議的網站標記為不安全網站
  • 蘋果要求2017年App Store中的所有應用都必須使用https加密連線;
  • 微信小程式要求必須使用https
  • 新一代的 HTTP/2 協議的支援需以https為基礎。

基於這些原因,https部署勢在必行。

https特點

https是http的安全升級版本,在http的基礎上新增SSL/TLS層。大致說一下原理:基本思路就是採用公鑰加密,客戶端向服務端索要公鑰,收到公鑰後使用它加密資訊,伺服器收到資訊後使用與公鑰配套的私鑰解密。

上一張圖補充說明原理

來一次https原理到配置“一條龍”

這樣做的目的:

  • 傳輸內容加密,保證資料傳輸安全
  • 身份驗證,防止冒充
  • 資料完整性校驗,防止內容被第三方冒充或者篡改

https部署過程

帶你瞭解證書

1)為什麼需要證書?

對於請求方,它如何能確定所得公鑰是從目標主機那裡釋出的,而不是中間人釋出給它的?或者怎麼去確定目標主機是可信任的,或者目標主機背後的企業或機構靠譜?這時候,我們需要一個權威、值得信賴機構(一般是由政府稽核並授權的機構)來統一對外發放主機機構的公鑰,來解決信任問題(中心化)

2)如何申請證書?

使用者首先生成特定金鑰對,並將公鑰和部分必要資訊傳送給認證中心。認證中心在核實資訊合法後,執行一些必要的步驟,以確信請求是使用者提交的(通常是提供認證檔案,你需要下載並將檔案放在域名特定目錄下)。然後,認證中心將發給使用者一個數字證書

3)證書內容資訊是什麼?

  • 證書頒發機構的名稱
  • 證書本身的數字簽名
  • 證書持有者公鑰+部分資訊
  • 證書籤名用到的Hash演算法

證書由獨立的證書發行機構釋出,每種證書的可信任級別不同,有點類似樹的結構。這點一定要注意,在部署https要保證證書鏈完整(向上可以追溯到CA根證書,否則某些情況下會提示網站不安全,https部署失敗)

4)證書有效性校驗

瀏覽器內部會內建CA根證書,使用CA證書校驗配置的證書

  • 證書頒發的機構錯誤----危險證書
  • 證書頒發的機構正確,根據CA根證書的公鑰對證書摘要進行解密,解密失敗----危險證書;解密成功得到摘要A,然後再根據簽名的Hash演算法計算出證書的摘要B,對比A與B,若相等則正常,若不相等則是被篡改過的----危險證書。
  • 證書過期----危險證書。

證書申請

上面說了那麼多理論知識,終於迎來了實操,don't bb,show you code

下面我將使用證書頒發機構ssls來實操。

至於為什麼選擇它?

  • 因為價效比高,價格可以,證書質量很高。
  • 公司在用

就是這麼任性的理由。好了,書歸正傳

國際慣例,註冊登入 -> 選擇CERTS,之後選擇合適的商品,加入購物車,選擇數量和有效時間

商品列表,介面做的還是很好看的

來一次https原理到配置“一條龍”

下面重點來了,證書部署三步走

1)按照提示,輸入CSR。使用openssl生成

openssl req -new -newkey rsa:2048 -sha256 -nodes -out www.hashfish.net.csr -keyout www.hashfish.net.key -subj "/C=CN/ST=BeiJing/L=BeiJing/O=HASH FISH./OU=Web Security/CN=www.hashfish.net"
複製程式碼

命令的含義 req——執行證書籤發命令

-new——新證書籤發請求

-out——輸出的csr檔案的路徑

-keyout——指定私鑰路徑

-subj——證書相關的使用者資訊(subject的縮寫)

直接使用是注意修改資訊,別直接複製了(斜眼笑)

2)根據提示完成其他操作(填寫接收證書郵箱等操作),order狀態變為in progress,這時候需要你把驗證檔案放到制定的目錄下,以完成ssls的驗證

上圖吧,直觀一些

來一次https原理到配置“一條龍”

3)驗證完成之後,若干時間後,你會收到以證書為附件的郵件,合併證書(如果有多個的話,一定要保持證書鏈完整,避免有些情況下提示非安全連結),上傳伺服器,配置nginx 重啟nginx,整個世界清淨了。

合併證書

//合併證書的命令
//將證書和CA證書合併成pem
cat  www.hashfish.net.crt  www.hashfish.net.ca-bundle > www.hashfish.net.pem
複製程式碼

配置nginx

//在特定的域名中新增
listen 443;
ssl_certificate  【合併過後的.pem檔案路徑】
ssl_certificate_key  【openssl生成的私鑰檔案路徑】
複製程式碼

好了,https證書部署到此結束。上一張經典的圖來描述一下https請求的過程

來一次https原理到配置“一條龍”
轉載必須標明出處,謝謝。文章有疏漏淺薄之處,請各位大神斧正

相關文章