前言
在開始這篇文章之前,需要先確認已經完成下列兩篇文章:
簡介Certbot
Certbot是一個由電子前哨基金會(EFF)所開發的工具,其目的是為了讓我們能夠輕易的安裝他們所推出的Let’s Encrypt憑證與續約。
那這個憑證,每次有效期只有三個月,因此續約憑證的有效性就顯的格外重要。以下是安裝的方法與步驟。
安裝Certbot
首先先進入他們所推出的官網
畫面會長下面這個樣子:
接著依照自己的作業系統與使用的HTTP server名稱選擇,以上述兩個教學文章來說,我們這邊要選擇的是,Ubuntu與Nginx,選完之後,會像下列的圖示那樣。
我們從上面的圖片可以看到,選好之後會有相對應的事情要我們做,依照它所寫的步驟,一步一步的將Certbot給安裝起來。依序的輸入下面的指令:
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
安裝完成之後,我們可以選擇使用下面的指令,產生我們要SSL憑證之外,還需要幫我們設定Nginx相關的憑證設定。
sudo certbot --nginx
執行上述的指令之後,會跑出下面的畫面:
**注意**
如果在執行上述的指令發生下列類似錯誤訊息的話:
no module named pyasn1
有一些套件/模組並沒有安裝在系統中,因此我們需要使用下列的指令將我們缺少的套件給安裝起來。
要注意的是,在Ubuntu 16.04中,它會使用Python 3來安裝我們的
sudo apt-get install python3-pyasn1 python3-pyasn1-modules
安裝完成之後,再執行一次就會產生出這樣的畫面:
接著會開始一連串的問問題,像是:輸入你要顯示的e-mail還有一些條款需要同意等。
再來後面就是,有要同意就輸入『A』,或是要輸入是則輸入『Y』等,最後來到下面的畫面:
這邊是要問在它從網域清單裡面所找到的網域,請選擇要上HTTPS的憑證。
那這邊假使沒有出現你所建立好的子網域提供我們選擇的選項,沒有關係,我們在後面會有其他的作法可以指定網域上HTTP憑證。
這邊出現可以選擇網域的是:peter-lee.tk和www.peter-lee.tk
那假設上面所列出的清單都想上HTTPS憑證的話,就直接按下一enter鍵即可,那若要選擇,就選擇數字的1,2,3…..吧!我在這邊是選擇按下enter鍵。
在過程中,會有選項問說要不要設定重新導向到HTTPS的選項,這邊可以「No redirect」
我們後面的步驟中可以自行設定。重新導向問題如截圖:
完成之後,會產生下面的截圖,會出現所需要注意的Notes
接著我們輸入下面的網址來測試看看有沒有上好HTTPS憑證。
https://peter-lee.tk
那這樣就成功了。
強制從HTTP導向到HTTPS
有時候我們需要要求所有瀏覽網站的訪客都要使用HTTPS的方式進行連線,那我們就要讓訪客HTTP連線時,幫它重新導向到正確的位址。
我們可以在Nginx的設定檔中,加註這一行來達到這個目的。
我們先用vim編輯器打開Nginx設定檔。
sudo vim /etc/nginx/sites-available/default
在原來的設定檔裡面加上一些設定:
server { listen 80; server_name example.com www.example.com; root /var/www/html index index.php index.html if ($scheme = "http") { return 301 https://$server_name$request_uri; } }
這個設定意思是說:當檢查$scheme是http時,就把整個網址導向成https連線方式,並給HTTP狀態碼為301。
接著存檔,並檢查Nginx語法是否有誤並重新啟動Nginx服務。
sudo nginx -t && sudo service nginx restart
接著瀏覽網站,就會發現會重新導向到HTTPS新的網站了。
利用Certbot指定網域
有時候,列出可以上SSL證書的子網域列表中,並沒有我們想要的,但是我們可以透過certbot所提供的指令來指定我們要上SSL證書的子網域。
不過記得要先把要上SSL證書的子網域先建立好。
指令如下:
certbot --nginx certonly -n -d sub.domain1.com
- –nginx是指到哪一個HTTP server
- certonly指的是只要產生憑證證書就好。
- -n指的是不要有互動的選項(no interactive的意思)
- -d指的是說指定要產生SSL憑證的網域名稱。
設定工作排程重新簽章憑證
因為Let’s encrypt SSL的證書也需要重新簽章憑證,所以要設定工作排程。
因為每三個月憑證證書就會失效,因此就需要使用工作排程來設定排程重新簽章。
進入排程編輯設定檔
sudo crontab -e
設定每三個月會重新簽章一次
0 0 3 * * bash renew.sh
renew.sh
certbot --nginx certonly -n -d domain.com
簡易故障排除
在這章節,是我遇到的錯誤,因為我過了一段時間都還沒有把HTTPS的重新導向設定完成,一直吐「redirects are too many」的訊息給我….後來我找到問題了。
因為我把網域交給CLOUDFLARE代管,而DNS record會把proxy開起來,這意味著可以使用Cloudflare 外部forward的SSL連線,但是我們已經有安裝Let’s encrypt SSL了。
所以我們應該要將proxy forwarding 給關掉,如下示意圖,變成灰色就是代表關掉了。
下一篇文章,將會介紹PostgreSQL的使用方式,不要錯過了喔!