使用 Let’s Encrypt 為網站加上 SSL 憑證

2016-09-27

Let’s Encrypt

官方推薦使用 certbot 來申請,步驟已經簡化到相當簡單,先在 certbot 網頁中 選擇使用的 Webserver 及 OS ,接著就會告訴你怎麼申請。

我的主機規格為 Apache 和 Ubuntu 14.04 。

一直到 Get Started 階段,這邊記錄一下我卡到的點(雖然很簡單,但還是卡住了…)。

先說卡住的點與解決的辦法:
1. 使用 apache plugin 申請時, Apache 的 VirtualHost 設定必須每個網址各別設定在一個獨立的 .conf 檔案。
2. 同網域、但不同子網域的網址要申請憑證時,要一個一個申請,後面的申請時會擴展( expand )前面申請好的憑證。

以下則是較碎念的解釋。

官方有幾種 plugin 可供選擇來申請憑證,我因為是使用 Apache Webserver ,所以就直接選擇 --apache 的 plugin:

$ ./path/to/certbot-auto --apache

第一次使用時會額外問一些資料,像是 Email 等等(有點忘了還有啥,跟著填下去就是了)。

接著進到申請憑證階段(或是之後再度申請時),會先讓你選擇要為哪個網址加上 SSL 憑證,這個部分要記得,在 Apache 的 VirtualHost 設定,必須每個網址各別設定一個 conf 檔案, certbot 的 apache plugin 才抓得到你有使用的 VirtualHost 。

像是我原本是把所有 VirtualHost 設定都放在 /etc/apache2/sites-available/000-default.conf ( hsin.tw, blog.hsin.tw, demo.hsin.tw 等等)中,所以 certbot 一直跟我說抓不到可以設定的網址,直到我將 VirtualHost 設定分別獨立成 000-default-main.conf , 000-default-blog.conf , 000-default-demo.conf 檔案(檔名應該沒限制),才可以正常選擇得到。 REF.

再來就沒什麼困難點,但申請完成並手動重啟 Apache 後,Apache 吃不到這些個別檔案的 VirtualHost 設定,所以我又將這些個別檔案中的 VirtualHost 設定(將 port 80 的 Rewrite 去 https 的規則)塞回原本的 000-default.conf ,重啟後才可以正常吃得到。

可能是我的 Apache 及主機的問題,不確定。

接著另一個卡住的點是,我要為同網域、但不同子網域的網址(www.hsin.tw, blog.hsin.tw 類似這樣)分別申請憑證,一開始我將所有網址一起申請,結果變成只有一個網址,其他都是 alias 到前面那個網址(可能改一下還是可行,但一時找不到辦法)。

所以其實應該是一次申請一個網址的憑證,像我先申請的是 blog.hsin.tw (進入到設定畫面時選擇網址),都設定完成後,接著再申請 hsin.tw ,這時 certbot 會告訴你已經有同網域的憑證,要不要 expand 就好,選擇 expand 後就會使用同一個憑證來申請。最後我還再申請了 demo.hsin.tw 的憑證,不過就都放在同一個憑證中。(不知道是不是誤打誤撞,如果有更簡單的方式請不吝告訴我~)

更新憑證

Let’s Encrypt 的 SSL 憑證 90 天就會到期,但只有在到期前 30 天內才可以更新憑證,所以可以設定 cronjob 來定時更新,先寫一個用來更新的檔案 /path/to/certbot_renew.sh :

#!/bin/sh
/path/to/certbot-auto renew --quiet --no-self-upgrade

然後加入到 crontab 中:

30 5 * * 1 /path/to/certbot_renew.sh

每週一的早上 05:30 會進行更新。 REF.

備註: /path/to/ 指的是安裝 certbot-auto 的路徑。

發表迴響

彙整

分類