讓網站永久擁有HTTPS-申請免費SSL證書並自動續期
為什麼要用HTTPS
網站沒有使用HTTPS的時候,瀏覽器一般會報不安全,而且在別人訪問這個網站的時候,很有可能會被運營商劫持,然後在網站裡顯示一些莫名其妙的廣告。
有HTTPS的時候,通俗地講所有的資料傳輸都會被加密,你和網站之間的資料交流也就更加安全。
相關簡介
我們加密吧
如果要啟用HTTPS,我們就需要從證書授權機構處獲取一個證書,讓我們加密就是一個證書授權機構。我們可以從讓加密獲得網站域名的免費的證書。
Certbot
Certbot是Let's Encrypt推出的獲取證書的客戶端,可以讓我們免費快速地獲取Let's Encrypt證書。
SSL超市
SSL超市是一家國內的SSL證書提供商,同樣也擁有免費證書。提供而且豐富的工具https://www.sslchaoshi.com
獲取HTTPS證書
獲取SSL證書的過程大體上都一樣。既可以圖形化,也可以命令列,最後實現的效果都完全一樣,大家各取所需。
命令列
安裝Certbot
進入Certbot的官網,選擇你所使用的軟體和系統環境,然後就會跳轉到對應版本的安裝方法,以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 certbot
申請證書
安裝完成後執行:
certbot certonly --webroot -w / var / www / example -d example.com -d www.example.com
這條命令的意思是為以/無功/網路/例子為根目錄的兩個域名example.com和www.example.com申請證書。
如果你的網站沒有根目錄或者是你不知道你的網站根目錄在哪裡,可以通過下面的語句來實現:
certbot certonly --standalone -d example.com -d www.example.com
圖形化
進入SSL的超市官網https://www.sslchaoshi.com註冊了賬號之後,選擇那個COMOD單域名證書,然後點確認購買,或者選擇一款測試版的證書進行購買錢測試使用。
登陸該網址後,點選註冊,然後找到這款證書,(我看了是行業中最便宜的一款了)
點選“確認購買”
完成支付後點擊證書詳情(如果你要開發票的話就點選開發票就可以了)
輸入域名,並點選“生成CSR並提交申請”按鈕
這裡我選擇郵箱驗證方式,其它另外三種依照你的個人情況而定,反正就是為了驗證域名是不是你的而已。點選“確定”按鈕
這裡有個注意事項,郵箱採用驗證一定要是該域名的 所有者聯絡郵箱 大家可以到站長工具域名註冊查詢,查到的資訊如下
大約過幾分鐘,郵箱會收到一封驗證郵件,如下圖,複製②指向的一串驗證碼,點選①處的這裡連結
輸入驗證碼,點選“下一步>”按鈕
提示已經輸入正確的驗證碼,點選“關閉視窗”
大約等到10分鐘左右,再次登陸https://www.sslchaoshi.com,進入個人中心,可以看到已經成功申請SSL證書,點選檢視詳情
此時你可以點選證書打包下載,然後免費的SSL證書就可以下載到本地了,下載後可以看到SSL壓縮包內的檔案,
有各個WEB伺服器的證書,你可以根據你的WEB伺服器的版本選擇。
注意:如果提交CSR的時候選擇的是自己生成的CSR,打包下載的證書壓縮包裡沒有IIS目錄,需要使用者用CSR對應的私鑰和證書去生成IIS需要的PFX字尾證書
部署HTTPS證書
找到網站的Nginx配置檔案,找到聽80;,修改為listen 443;在這一行的下面新增以下內容:
ssl on;
ssl_certificate XXX / fullchain.pem; 修改為fullchain.pem所在的路徑
ssl_certificate_key XXX / privkey.pem; 修改為privkey.pem所在的路徑
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
儲存退出後,通過nginx -t來檢查配置檔案是否正確,有錯誤的話改之即可。配置檔案檢測正確之後,通過nginx -s reload來過載配置檔案。
然後通過訪問https://example.com來檢視是否配置成功。
如果發現無法訪問或者是載入不出來的話檢查一下443埠有沒有開啟!
設定HTTP強制跳轉HTTPS
上一步成功之後大家可能會發現通過原來的http://example.com無法訪問網頁了,因為HTTP預設走的是80埠,我們剛才將其修改為443埠了。在這裡我們可以在配置檔案的最後一行加入以下程式碼:
伺服器{
聽80;
server_name example.com; 這裡修改為網站域名
重寫^(。*)$ https:// $ host $ 1 permanent;
}
意思是每一個通過80埠訪問的請求都會強制跳轉到443埠,這樣一來訪問http://example.com的時候就會自動跳轉到https://example.com了。
命令列下設定證書自動續期
有心的小夥伴可能會留意到我們剛才申請的整數的有效期只有90天,不是很長,可是我們可以通過Linux的自帶的cron的來實現自動續期,這樣就相當於永久了。
隨便找一個目錄,新建一個檔案,名字隨便起,在這裡以示例為例,在裡面寫入0 * / 12 * * * certbot renew --quiet --renew-hook“/etc/init.d/nginx重灌“,儲存。
然後在控制檯裡執行crontab例子一切都OK了。原理是示例裡存入了一個每天檢查更新兩次的命令,這個命令會自動續期伺服器裡存在的來自Certbot的SSL證書。然後把示例裡存在的命令匯入進Certbot的定時程式裡。
附:
其它環境下的證書部署
https://www.sslchaoshi.com/help/docs
Nginx的相關命令
nginx -t驗證配置是否正確
nginx -v檢視Nginx的版本號
服務nginx啟動啟動Nginx
nginx -s停止快速停止或關閉Nginx
nginx -s quit正常停止或關閉Nginx
nginx -s reload重新載入配置檔案
crontab的相關命令
cat / var / log / cron檢視crontab日誌
crontab -l檢視crontab列表
crontab -e編輯crontab列表
systemctl status crond.service檢視crontab服務狀態
systemctl restart crond.service重啟crontab