免費的 SSL 憑證:Let’s Encrypt!

這幾天隱約想起2015年底好像有看到訊息2016年會有免費的 SSL憑證 可以申請
稍微搜尋了一下有找到 Let’s Encrypt 有提供,其相關背景鸚鵡就不贅述囉
值得注意的是 Let’s Encrypt 提供的憑證只有90天,每60可以更新(renew)憑證

點進網站按下 Get Started 並沒相關申請界面,而是說明採用 ACME protocol 來進行申請。
因此必須主機上擁有使用 shell 的權限才能進行,也就是要有 Linux 基本能力 並且可以使用 ssh 連上主機,而且能取得 root 權限

不熟悉的人可以選擇透過 SSL For Free 來進行申請。步驟不多挺簡單,網路上也很多教學,有需要可以自己搜尋一下。很多提供虛擬主機服務商也都有整合 Let’s Encrypt 服務,

鸚鵡是自己管理主機,所以就自己選擇工具安裝申請憑證,以下就大概紀錄一下步驟

官方推薦使用 Certbot 這個 ACME client,除了 Certbot 外還有很多其他的選擇,有需要的可以到 這邊 逛逛。

鸚鵡選擇官方推薦的 Certbot 這工具
(Certbot 在 2016 年也有了新的名稱:letsencrypt 或 letsencrypt-auto)

Certbot 提供相當完整的安裝指引,到 https://certbot.eff.org/
選擇 Web Server 和 系統就會有安裝指引

但是鸚鵡已經自行管理自己的 Linux 主機多年,對於設定檔和目錄結構也都有自己慣用的模式,所以安裝時是選擇獨立安裝(standalone)的模式

步驟大概就是這些

  1. 下載 Certbot
  2. standalone webroot 模式進行安裝來申請 SSL憑證
  3. 自己修改 Apache 的設定檔,測試 HTTPS 協定
  4. 將 http 協定的所有請求導向 https 協定
  5. 設定 定時更新憑證

主機環境:

  • CentOS 7 x64
  • Apache 2.4.6

 

  1. 下載 Certbot
  2. 以 standalone 模式進行安裝來申請 SSL憑證
    稍微再深入了解後,往後的 renew 認證也會以申請時的方式進行認證
    所以使用 standalone 模式申請會造成 renew 時 網頁伺服器 被關閉以進行驗證
    因此建議以 webroot 的方式進行申請要申請的 domain 是:ezbox.idv.tw 和 www.ezbox.idv.tw

    如果沒有問題,就會在畫面上看到這樣的訊息

    這樣,就完成  SSL憑證 的申請了!就是這樣簡單 ^_^

    這時候 SSL憑證 可以在主機上的 /etc/letsencrypt/live 找到 Domain 的子目錄
    以本範例申請的 Domain 是 ezbox.idv.tw 為例
    完整的路徑是:/etc/letsencrypt/live/ezbox.idv.tw

    其中會有4個檔案(連結):

     

  3. 測試一下 https 協定是否正常
    假設原本的網站的 virtualhost 設定是

    那麼在新增下面的內容

    然後重新啟動 Apache 後應該就可以做 https 連線了

    不過安裝 mod_ssl 時,有一個預設的設定檔造成 apache 無法正常啟動
    路徑是:/etc/httpd/conf.d/ssl.conf
    所以鸚鵡將其更名為 /etc/httpd/conf.d/ssl.conf.bak 後就可以正常啟動 apache

  4. 最後將 http 的連線自動導向到 https
    鸚鵡是選擇用 mod_rewrite 來做處理,完整的設定如下

    再次重新啟動 apache 後,所有連線就會自動導向到 https  連線

  5. 設定自動更新憑證
    第3步驟安裝完成時就有提示,如果要一次全部檢查所有已申請的憑證
    執行:certbot-auto renew
    所以我們來測試看看

    有進行檢查,並且判定還不需要做 renew (因為我們才剛申請到)

    有效期是 90天,滿 60天後可以 renew
    所以鸚鵡設定 每週日 的凌晨 5點整執行檢查

    這樣便完成了所有的動作

 

在服務沒有取消前或取消免費前,我們就可以擁有一個免費的 SSL憑證

 

 

附註:
以 standalone 申請時, Certbot 會停止主機上 httpd 服務,啟動獨立的 Web Server 開始驗證您輸入的 domain 是否是您所擁有
這時候也必須確認主機上的 443 port 是可以正常連線的,否則會看到類似這樣的錯誤訊息

 

延伸閱讀

  1. 將 Let’s Encrypt 申請到的 SSL 憑證用在 Dovecot 上,提供 pop3s 和 imaps 服務
  2. 將 Let’s Encrypt 申請到的 SSL 憑證用在 Postfix 上,提供 SMTP with TLS 和 smtps 服務