三種取得免費 SSL/TLS 的方法 (Free SSL on Linux)

SSL/TLS 絕對是自己架設伺服器或是網站會遇到的前幾個大問題,這篇文章整理三個我目前用過免費 SSL 的方法,使用 Apache 網頁伺服器為例。分別是直接上傳買的憑證 SSL/TLS key & crt & fullchain、snap Certbot / bncert-tool、Cloudflare 代理。

reference: https://docs.bitnami.com/aws/how-to/understand-bncert/https://www.cloudflare.com/zh-tw/https://certbot.eff.org

SSL/TLS 絕對是自己架設伺服器或是網站會遇到的前幾個大問題,這篇文章整理三個我目前用過免費 SSL 的方法,使用 Apache 網頁伺服器為例。分別是直接上傳買的憑證 SSL/TLS key & crt & fullchain、snap Certbot / bncert-tool、Cloudflare 代理。

reference: https://docs.bitnami.com/aws/how-to/understand-bncert/https://www.cloudflare.com/zh-tw/https://certbot.eff.org

前言

伺服器建立好三個月後的今天,我使用 bncert-tool 的 SSL 憑證沒有自動續約,造成整個下午都進不去我的網頁,在兩個小時重新複習、debug 並重新安裝後,終於再次上線了!

因為剛好今天有時間,所以以下整理了三個我從新手到現在為止接觸的三個取得免費 SSL/TLS 的方法。

  1. 直接上傳買的憑證 SSL/TLS key & crt & fullchain;
  2. Let’s Encrypt SSL via certbot or bncert-tool;
  3. 透過 Cloudflare。

直接上傳買的 SSL/TLS 憑證

這個部分可以參考前幾篇比較域名註冊商的文章中的 IONOS Wildward,我有詳細紀錄整個安裝及取得的步驟,不過這就是要自己花錢購買夠安全、保護夠全面的憑證,如果不是剛好有人送,不然直接使用免費的 Let’s Encrypt SSL/TLS 更安全。

Let’s Encrypt SSL via certbot or bncert-tool

使用 certbot 的話需要根據你的系統選擇對應的步驟,可以前往他們的官網 certbot.eff.org,或是參考我之前寫的 Free SSl/TLS on Linux Apache with Flask。如果你使用 bitnami 的 package 的話他們有提供 bncert-tool(其實也是使用 Let’s Encrypt),前往 Learn About The Bitnami HTTPS Configuration Tool,他們有一部影片,但我很常遇到無法自動更新,而且社群沒有 certbot 大,現在我大部分都使用 certbot,很簡單只要把 apache 或 nginx 指定 SSL Certificate 的路徑導向 Certbot 放置 SSL 的地方即可!通常會在 /etc/letsencrypt/live/ 資料夾底下。

// yourdomain.conf
<VirtualHost *:443>
...
    SSLEngine on
    SSLCertificateFile "/etc/letsencrypt/live/mysite.com-0001/fullchain.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/mysite.com-0001/privkey.pem"
...

透過 Cloudflare NameServer

SSL/TLS using Let's Encrypt and via Cloudflare

如果透過 Cloudflare 的話這邊有兩種方法

  1. Full mode 使用自簽 SSL/TLS 接收 Cloudflare 的 request;
  2. Full (strict) mode 使用受信任的 SSL/TLS Certificate 接收 Cloudflare 的 request。

但是因為使用 Cloudflare 的 Nameserver DNS 不會直接指向伺服器,會造成 Let’s Encrypt 以及 bncert-tool 無法順利透過網域勾稽他自動生成的檔案,以取得憑證,所以我後來都直接使用第一種,如果您自己的伺服器有購買 SSL/TLS 而不需要額外驗證,第二種方法會更安全且才適用。

too many redirection

可以參考 Cloudflare 自己的文章:ERR_TOO_MANY_REDIRECTS

如果使用預設 SSL/TLS encryption mode Flexible,Cloudflare 會傳送 http 到你的伺服器,而本來就有將 http 重新導向到 https 就會造成無法回傳 http 給 Cloudflare 的無限循環。
>> 解決方法:調整成 Full 或是 Full (strict),這樣 Cloudflare 會傳送 https 給您的伺服器。