前言
無論你是要看小姐姐/小哥哥,還是關注國家大事,想要第一時間掌握新鮮資訊和最新動態,網路都會成為你的第一選擇。而網路協議中的http和https是我們最見到的。
為什麼要使用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部署過程
帶你瞭解證書
1)為什麼需要證書?
對於請求方,它如何能確定所得公鑰是從目標主機那裡釋出的,而不是中間人釋出給它的?或者怎麼去確定目標主機是可信任的,或者目標主機背後的企業或機構靠譜?這時候,我們需要一個權威、值得信賴機構(一般是由政府稽核並授權的機構)來統一對外發放主機機構的公鑰,來解決信任問題(中心化)
2)如何申請證書?
使用者首先生成特定金鑰對,並將公鑰和部分必要資訊傳送給認證中心。認證中心在核實資訊合法後,執行一些必要的步驟,以確信請求是使用者提交的(通常是提供認證檔案,你需要下載並將檔案放在域名特定目錄下)。然後,認證中心將發給使用者一個數字證書
3)證書內容資訊是什麼?
- 證書頒發機構的名稱
- 證書本身的數字簽名
- 證書持有者公鑰+部分資訊
- 證書籤名用到的Hash演算法
證書由獨立的證書發行機構釋出,每種證書的可信任級別不同,有點類似樹的結構。這點一定要注意,在部署https要保證證書鏈完整(向上可以追溯到CA根證書,否則某些情況下會提示網站不安全,https部署失敗)
4)證書有效性校驗
瀏覽器內部會內建CA根證書,使用CA證書校驗配置的證書
- 證書頒發的機構錯誤—-危險證書
- 證書頒發的機構正確,根據CA根證書的公鑰對證書摘要進行解密,解密失敗—-危險證書;解密成功得到摘要A,然後再根據簽名的Hash演算法計算出證書的摘要B,對比A與B,若相等則正常,若不相等則是被篡改過的—-危險證書。
- 證書過期—-危險證書。
證書申請
上面說了那麼多理論知識,終於迎來了實操,don`t bb,show you code
下面我將使用證書頒發機構ssls來實操。
至於為什麼選擇它?
- 因為價效比高,價格可以,證書質量很高。
- 公司在用
就是這麼任性的理由。好了,書歸正傳
國際慣例,註冊登入 -> 選擇CERTS,之後選擇合適的商品,加入購物車,選擇數量和有效時間
商品列表,介面做的還是很好看的
下面重點來了,證書部署三步走
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的驗證
上圖吧,直觀一些
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請求的過程
轉載必須標明出處,謝謝。文章有疏漏淺薄之處,請各位大神斧正