1. 程式人生 > >讓網站永久擁有HTTPS - 申請免費SSL證書並自動續期

讓網站永久擁有HTTPS - 申請免費SSL證書並自動續期

版權宣告:來自https://lucien.ink,轉載請註明文章出處。    https://blog.csdn.net/xs18952904/article/details/79262646
本文永久地址
為什麼要用HTTPS
相關簡介
Let’s Encrypt
Certbot
便宜SSL
獲取HTTPS證書
命令列
安裝Certbot
申請證書
圖形化
部署HTTPS證書
設定HTTP強制跳轉HTTPS
命令列下設定證書自動續期
附:
其它環境下的證書部署
Nginx相關命令
crontab相關命令
參考文件
本文永久地址
  http://www.lucien.ink/archives/81/

為什麼要用HTTPS
  網站沒有使用HTTPS的時候,瀏覽器一般會報不安全,而且在別人訪問這個網站的時候,很有可能會被運營商劫持,然後在網站裡顯示一些莫名其妙的廣告。

  有HTTPS的時候,通俗地講所有的資料傳輸都會被加密,你和網站之間的資料交流也就更加安全。

相關簡介
Let’s Encrypt
  如果要啟用HTTPS,我們就需要從證書授權機構處獲取一個證書,Let’s Encrypt 就是一個證書授權機構。我們可以從 Let’s Encrypt 獲得網站域名的免費的證書。

Certbot
  Certbot是Let’s Encrypt推出的獲取證書的客戶端,可以讓我們免費快速地獲取Let’s Encrypt證書。

便宜SSL
  便宜SSL是一家國內的SSL證書提供商,同樣也擁有免費證書。而且提供豐富的工具: https://www.pianyissl.com/tools。

獲取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 
1
2
3
4
5
申請證書
  安裝完成後執行:

certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com
1
  這條命令的意思是為以/var/www/example為根目錄的兩個域名example.com和www.example.com申請證書。

  如果你的網站沒有根目錄或者是你不知道你的網站根目錄在哪裡,可以通過下面的語句來實現:

certbot certonly --standalone -d example.com -d www.example.com
1
  使用這個語句時Certbot會自動啟用網站的443埠來進行驗證,如果你有某些服務佔用了443埠,就必須先停止這些服務,然後再用這種方式申請證書。

  證書申請完之後,Certbot會告訴你證書所在的目錄,一般來說會在/etc/letsencrypt/live/這個目錄下。

圖形化
  進入便宜SSL的官網https://www.pianyissl.com,註冊了賬號之後,選擇那個體驗版的免費測試,然後點確認購買。

  輸入域名並點選生成CSR並提交申請按鈕。

  點選確定按鈕。

  接下來會選擇驗證方式。

  這裡我選擇郵箱驗證方式,其它另外兩種依照你的個人情況而定,反正就是為了驗證域名是不是你的而已。

  大約過幾分鐘,郵箱會收到一封驗證郵件,如下圖,複製②指向的一串驗證碼,點選①處的Here連結。

  輸入驗證碼,點選Next>按鈕。

  提示已經輸入正確的驗證碼,點選Close Window。

  大約等到10分鐘左右,再次登陸https://www.pianyissl.com,進入個人中心,可以看到已經成功申請SSL證書,點選檢視詳情。

  此時你可以點選箭頭所指的證書打包下載,然後免費的SSL證書就可以下載到本地了,下載後可以看到SSL壓縮包內的檔案。

部署HTTPS證書
  找到網站的Nginx配置檔案,找到listen 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;
1
2
3
4
5
6
7
  儲存退出後,通過nginx -t來檢查配置檔案是否正確,有錯誤的話改之即可。配置檔案檢測正確之後,通過nginx -s reload來過載配置檔案。

  然後通過訪問https://example.com來檢視是否配置成功。

  如果發現無法訪問或者是載入不出來的話檢查一下443埠有沒有開啟!

設定HTTP強制跳轉HTTPS
  上一步成功之後大家可能會發現通過原來的http://example.com無法訪問網頁了,因為HTTP預設走的是80埠,我們剛才將其修改為443埠了。在這裡我們可以在配置檔案的最後一行加入以下程式碼:

server {
    listen 80;
    server_name example.com;  這裡修改為網站域名
    rewrite ^(.*)$ https://$host$1 permanent;
}
1
2
3
4
5
  意思是每一個通過80埠訪問的請求都會強制跳轉到443埠,這樣一來訪問http://example.com的時候就會自動跳轉到https://example.com了。

命令列下設定證書自動續期
  有心的小夥伴可能會留意到我們剛才申請的整數的有效期只有90天,不是很長,可是我們可以通過Linux自帶的cron來實現自動續期,這樣就相當於永久了。

  隨便找一個目錄,新建一個檔案,名字隨便起,在這裡以example為例,在裡面寫入0 */12 * * * certbot renew --quiet --renew-hook "/etc/init.d/nginx reload",儲存。

  然後在控制檯裡執行crontab example一切都OK了。原理是example裡存入了一個每天檢查更新兩次的命令,這個命令會自動續期伺服器裡存在的來自Certbot的SSL證書。然後把example裡存在的命令匯入進Certbot的定時程式裡。

附:
其它環境下的證書部署
  https://www.pianyissl.com/support/

Nginx相關命令
nginx -t  驗證配置是否正確
nginx -v  檢視Nginx的版本號
service nginx start  啟動Nginx
nginx -s stop  快速停止或關閉Nginx
nginx -s quit  正常停止或關閉Nginx
nginx -s reload  重新載入配置檔案
1
2
3
4
5
6
crontab相關命令
cat /var/log/cron  檢視crontab日誌
crontab -l  檢視crontab列表
crontab -e  編輯crontab列表
systemctl status crond.service  檢視crontab服務狀態
systemctl restart crond.service  重啟crontab
1
2
3
4
5
參考文件
https://lucien.ink/archives/81/ 
https://www.cnblogs.com/zoro-zero/p/6590503.html 
http://blog.csdn.net/gsls200808/article/details/53486078 
https://certbot.eff.org/#ubuntuxenial-other 
http://nginx.org/en/docs/http/configuring_https_servers.html
--------------------- 
作者:LucienShui 
來源:CSDN 
原文:https://blog.csdn.net/xs18952904/article/details/79262646 
版權宣告:本文為博主原創文章,轉載請附上博文連結!