如何免費的讓網站啟用HTTPS

非典型網際網路發表於2018-03-04

今天,我把CoolShell變成https的安全訪問了。我承認這件事有點晚了,因為之前的HTTP的問題也有網友告訴我,被國內的電信運營商在訪問我的網站時加入了一些彈窗廣告。另外,HTTP的網站在搜尋引擎中的rank會更低。所以,這事早就應該幹了。現在用HTTP訪問CoolShell會被得到一個 301 的HTTPS的跳轉。下面我分享一下啟用HTTPS的過程。

我用的是 Let’s Encrypt這個免費的解決方案。Let’s Encrypt 是一個於2015年推出的數字證照認證機構,將通過旨在消除當前手動建立和安裝證照的複雜過程的自動化流程,為安全網站提供免費的SSL/TLS證照。這是由網際網路安全研究小組(ISRG – Internet Security Research Group,一個公益組織)提供的服務。主要贊助商包括電子前哨基金會Mozilla基金會Akamai以及Cisco等公司(贊助商列表)。

2015年6月,Let’s Encrypt得到了一個儲存在硬體安全模組中的離線的RSA根證照。這個由IdenTrust證照籤發機構交叉簽名的根證照被用於簽署兩個證照。其中一個就是用於簽發請求的證照,另一個則是儲存在本地的證照,這個證照用於在上一個證照出問題時作備份證照之用。因為IdenTrust的CA根證照目前已被預置於主流瀏覽器中,所以Let’s Encrypt簽發的證照可以從專案開始就被識別並接受,甚至當使用者的瀏覽器中沒有信任ISRG的根證照時也可以。

以上介紹文字來自 Wikipedia 的 Let’s Encrypt 詞條

為你的網站來安裝一個證照十分簡單,只需要使用電子子前哨基金會EFF的 Certbot,就可以完成。

1)首先,開啟 certbot.eff.org 網頁。

2)在那個機器上圖示下面,你需要選擇一下你用的 Web 接入軟體 和你的 作業系統。比如,我選的,nginxUbuntu 14.04

3)然後就會跳轉到一個安裝教程網頁。你就照著做一遍就好了。

以Coolshell.cn為例 – Nginx + Ubuntu

首先先安裝相應的環境:

1
2
3
4
5
$ 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

然後,執行如下命令:

1
$ sudo certbot --nginx

certbot 會自動檢查到你的 nginx.conf 下的配置,把你所有的虛擬站點都列出來,然後讓你選擇需要開啟 https 的站點。你就簡單的輸入列表編號(用空格分開),然後,certbot 就幫你下載證照並更新 nginx.conf 了。

你開啟你的 nginx.conf 檔案 ,你可以發現你的檔案中的 server 配置中可能被做了如下的修改:

1
2
3
4
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/coolshell.cn/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/coolshell.cn/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

1
2
3
4
# Redirect non-https traffic to https
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot

這裡建議配置 http2,這要求 Nginx 版本要大於 1.9.5。HTTP2 具有更快的 HTTPS 傳輸效能,非常值得開啟(關於效能你可以看一下這篇文章)。需要開啟HTTP/2其實很簡單,只需要在 nginx.conflisten 443 ssl; 後面加上 http2 就好了。如下所示:

1
2
3
4
listen 443 ssl http2; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/coolshell.cn/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/coolshell.cn/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

然後,就 nginx -s reload 就好了。

但是,Let’s Encrypt 的證照90天就過期了,所以,你還要設定上自動化的更新指令碼,最容易的莫過於使用 crontab 了。使用 crontab -e 命令加入如下的定時作業(每個月都強制更新一下):

1
2
0 0 1 * * /usr/bin/certbot renew --force-renewal
5 0 1 * * /usr/sbin/service nginx restart

當然,你也可以每天凌晨1點檢查一下:

1
0 1 * * * certbot renew

注:crontab 中有六個欄位,其含義如下:

  • 第1個欄位:分鐘 (0-59)
  • 第2個欄位:小時 (0-23)
  • 第3個欄位:日期 (1-31)
  • 第4個欄位:月份 (1-12 [12 代表 December])
  • 第5個欄位:一週當中的某天 (0-7 [7 或 0 代表星期天])
  • /path/to/command – 計劃執行的指令碼或命令的名稱

這麼方便的同時,我不禁要問,如果是一些惡意的釣魚網站也讓自己的站點變成https的,這個對於一般用來說就有點難以防範了。哎……

插播福利

1.近期整理了20G資源,包含產品/運營/測試/程式設計師/市場等,網際網路從業者【工作必備乾貨技巧、行業專業書籍、面試真題寶典等】,獲取方式:

  • 微信掃碼關注公眾號“非典型網際網路”,轉發文章到朋友圈,截圖發至公眾號後臺,即可獲取乾貨資源連結;

2.網際網路人交流群:

  • 關注公眾號“非典型網際網路”,在公眾號後臺回覆“入群”,人脈共享,一起交流;

如何免費的讓網站啟用HTTPS

當然,在nginx或apache上啟用HTTPS後,還沒有結束。因為你可能還需要修改一下你的網站,不然你的網站在瀏覽時會出現各種問題。

啟用HTTPS後,你的網頁中的所有的使用 http:// 的方式的地方都要改成 https:// 不然你的圖片,js, css等非https的連線都會導致瀏覽器抱怨不安全而被block掉。所以,你還需要修改你的網頁中那些 hard code http:// 的地方。

對於我這個使用wordpress的部落格系統來說,有這麼幾個部分需要做修改。

1)首先是 wordpress的 常規設定中的 “WordPress 地址” 和 “站點地址” 需要變更為 https 的方式。

2)然後是文章內的圖片等資源的連結需要變更為 https 的方式。對此,你可以使用一個叫 “Search Regex” 外掛來批量更新你歷史文章裡的圖片或別的資源的連結。比如:把 http://coolshell.cn 替換成了 https://coolshell.cn

3)如果你像我一樣啟用了文章快取(我用的是WP-SuperCache外掛),你還要去設定一下 “CDN” 頁面中的 “Site URL” 和 “off-site URL” 確保生成出來的靜態網頁內是用https做資源連結的。

基本上就是這些事。希望大家都來把自己的網站更新成 https 的。

作者:陳皓,部落格地址:https://coolshell.cn/articles/18190.html

相關文章