1. 程式人生 > >使用certbot為你的網站免費上https

使用certbot為你的網站免費上https

關於作者

程式開發人員,不拘泥於語言與技術,目前主要從事PHP和前端開發,使用Laravel和VueJs,App端使用Apicloud/Cordova混合式開發。合適和夠用是永不停息的追求。

什麼是https

引自維基百科
超文字傳輸安全協議(英語:Hypertext Transfer Protocol Secure,縮寫:HTTPS)是一種網路安全傳輸協議。在計算機網路上,HTTPS經由超文字傳輸協議進行通訊,但利用SSL/TLS來對資料包進行加密。HTTPS開發的主要目的,是提供對網路伺服器的身份認證,保護交換資料的隱私與完整性。
HTTPS的主要思想是在不安全的網路上建立一安全通道,並可在使用適當的加密包和伺服器證書可被驗證且可被信任時,對竊聽和中間人攻擊提供合理的防護。

HTTPS的信任繼承基於預先安裝在瀏覽器中的證書頒發機構(如VeriSign、Microsoft等)(意即“我信任證書頒發機構告訴我應該信任的”)。因此,一個到某網站的HTTPS連線可被信任,當且僅當:
使用者相信他們的瀏覽器正確實現了HTTPS且安裝了正確的證書頒發機構;
使用者相信證書頒發機構僅信任合法的網站;
被訪問的網站提供了一個有效的證書,意即,它是由一個被信任的證書頒發機構簽發的(大部分瀏覽器會對無效的證書發出警告);
該證書正確地驗證了被訪問的網站(如,訪問https://example時收到了給“Example Inc.”而不是其它組織的證書);
或者網際網路上相關的節點是值得信任的,或者使用者相信本協議的加密層(TLS或SSL)不能被竊聽者破壞。
HTTPS不應與在 RFC 2660 中定義的安全超文字傳輸協議(S-HTTP)相混淆。

http和https去區別

HTTP協議傳輸的資料都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私資訊非常不安全,為了保證這些隱私資料能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的資料進行加密,從而就誕生了HTTPS。簡單來說,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,要比http協議安全。
HTTPS和HTTP的區別主要如下:

  1. https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
  2. http是超文字傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
  3. http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。
  4. http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。

https工作原理

客戶端在使用HTTPS方式與Web伺服器通訊時有以下幾個步驟,如圖所示。

  • 客戶使用https的URL訪問Web伺服器,要求與Web伺服器建立SSL連線。

  • Web伺服器收到客戶端請求後,會將網站的證書資訊(證書中包含公鑰)傳送一份給客戶端。

  • 客戶端的瀏覽器與Web伺服器開始協商SSL連線的安全等級,也就是資訊加密的等級。

  • 客戶端的瀏覽器根據雙方同意的安全等級,建立會話金鑰,然後利用網站的公鑰將會話金鑰加密,並傳送給網站。

  • Web伺服器利用自己的私鑰解密出會話金鑰。

  • Web伺服器利用會話金鑰加密與客戶端之間的通訊。

關於TLS/SSL

傳輸層安全協議(英語:Transport Layer Security,縮寫:TLS),及其前身安全套接層(Secure Sockets Layer,縮寫:SSL)是一種安全協議,目的是為網際網路通訊,提供安全及資料完整性保障

為什麼要部署https

說到底,就是 https 更安全。甚至為了安全,一個專業可靠的網站, https 是必須的。 Firefox 和 Chrome 都計劃將沒有配置 SSL 加密的 http 網站標記為不安全(貌似 Firefox 50 已經這麼幹了),目前它們也正在聯合其他相關的基金會與公司推動整個網際網路 https 化,現在大家訪問的一些主要的網站。如 Google 多年前就已經全部啟用 https ,國內的淘寶、搜狗、知乎、百度等等也全面 https 了。甚至 Google 的搜尋結果也正在給予 https 的網站更高的排名和優先收錄權。

怎麼部署 https 呢

你只需要有一張被信任的 CA ( Certificate Authority )也就是證書授權中心頒發的 SSL 安全證書,並且將它部署到你的網站伺服器上。一旦部署成功後,當用戶訪問你的網站時,瀏覽器會在顯示的網址前加一把小綠鎖,表明這個網站是安全的,當然同時你也會看到網址前的字首變成了 https ,不再是 http 了。

怎麼獲得 SSL 安全證書

理論上,我們自己也可以簽發 SSL 安全證書,但是我們自己簽發的安全證書不會被主流的瀏覽器信任,所以我們需要被信任的證書授權中心( CA )簽發的安全證書。而一般的 SSL 安全證書籤發服務都比較貴,比如 Godaddy 、 GlobalSign 等機構簽發的證書一般都需要20美金一年甚至更貴,不過為了加快推廣 https 的普及, EEF 電子前哨基金會、 Mozilla 基金會和美國密歇根大學成立了一個公益組織叫 ISRG ( Internet Security Research Group ),這個組織從 2015 年開始推出了 Let’s Encrypt 免費證書。這個免費證書不僅免費,而且還相當好用,所以我們就可以利用 Let’s Encrypt 提供的免費證書部署 https 了

Let’s Encrypt 及 Certbot 簡介

Let’s Encrypt 是 一個叫 ISRG ( Internet Security Research Group ,網際網路安全研究小組)的組織推出的免費安全證書計劃。參與這個計劃的組織和公司可以說是網際網路頂頂重要的先驅,除了前文提到的三個牛氣哄哄的發起單位外,後來又有思科(全球網路裝置製造商執牛耳者)、 Akamai 加入,甚至連 Linux 基金會也加入了合作,這些大牌組織的加入保證了這個專案的可信度和可持續性。

Certbot 使用方法

Certbot 的官方網站是 https://certbot.eff.org/ ,開啟這個連結選擇自己使用的 web server 和作業系統,EFF 官方會給出詳細的使用方法,如下圖

開始安裝https

假設執行環境為centos7.1,Web 伺服器是 Nginx 1.12.0(因為我的生產環境是),當前工作目錄為 /root

  1. 獲取certbot客戶端
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
  1. 停止nginxyunx
service nginx stop
  1. 生成證書
./certbot-auto certonly --standalone --email `你的郵箱地址` -d `你的域名地址`

當前網站有多個域名時需在後面增加,例如

./certbot-auto certonly --standalone --email `你的郵箱地址` -d `你的域名1` -d `你的域名2`
  1. 檢視生產的證書
tree /etc/letsencrypt/live/
  1. 將證書用於nginx

在nginx網站配置檔案中增加

 # TLS 基本設定
ssl_certificate /etc/letsencrypt/live/www.just4fun.site/fullchain.pem;#證書位置
ssl_certificate_key /etc/letsencrypt/live/www.just4fun.site/privkey.pem;# 證書位置

啟動nginx

service nginx start

至此https配置完成

證書續簽

Let’s Encrypt 生成的免費證書為3個月時間,但是我們可以無限次續簽證書

./certbot-auto renew 



作者:安小下
連結:https://www.jianshu.com/p/fb3733cd0d3b
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。