使用 Certbot 來為網站申請 Let’s Encrtpt 憑證 (CentOS 7)

早就該面對與學習解決的問題,這一天,終究還是來了。

因為資安以及一些議題,所以網站資料使用 SSL/TLS 來加解密傳輸,早已是標準必備。

而好心的 ZeroSSL公司免費提供給本網站一年免費的憑證服務也到期,實在也不好總是四處尋覓免費專案,想想還是直接申請使用 Let’s Encrypt 所提供的免費 SSL/TLS 憑證來使用好了。(註:Let’s Encrypt 是一個免費及開放的提供憑證的機構(CA))

在此誠心感謝好心的 ZeroSSL 公司 以及偉大的 Let’s Encrypt 組織免費提供給大家的 SSL 憑證 資源!

我的目標是要申請與使用 Let’s Encrypt 所發行的免費 SSL/TLS 憑證,在經過一番研究之後,發現目前大家幾乎都是使用Certbot來申請憑證,所以我也跟著來使用。

  1. 安裝 Certbot
  2. 目前許多系統的套件管理程式都已將 Certbot 包進去,但若想使用最新版本者,或是不清楚者,可以參考 https://certbot.eff.org/ 的引導來進行安裝。

    我的網站系統是 CentOS 7 系列,所以可以不管上面講什麼,直接透過 yum 套件管理系統安裝。

    先搜尋有哪些可以安裝的程式(套件)組,在命令 yum search certbot 後,可以看到相關的程式(套件)組,又我的網頁伺服器是使用 Apache httpd 。

    確定之後,透過 yum 套件管理系統直接安裝起來,也順道將 openssl 與相關套件安裝起來:

    yum -y install certbot python2-certbot-apache python2-certbot openssl mod_ssl

     

  3. 使用 Certbot 申請憑證
  4. Certbot 可依據不同的狀況提供不同作法,基本上分成「單純取得憑證」和「自動化取得憑證」搭配「是否自動設定伺服器」的部分就產生多種作法。如果要支援自動化就必須通過 acme-challenge(http-01 或 dns-01 )驗證,設定流程複雜的部分多來自於驗證階段的設定。

    大致分成以下幾種:

    1. 全自動 (自備 HTTP 伺服器) — certbot
    2. 半自動(自備 HTTP 伺服器,不調整 HTTP 伺服器設定)– certbot certonly
    3. webroot (自備 HTTP 伺服器,自行設定 acme-challenge 部分) — certbot certonly –webroot
    4. 手動(自備 HTTP 伺服器 、其他主機)– certbot certonly –manual
    5. DNS 套件 — certbot certonly –dns-PLUGIN
    6. Standalone(Certbot 提供獨立 HTTP 伺服器部分)– certbot certonly –standalone

     

    讀了參考文件後,一開始採用自行設定法:
    /usr/bin/certbot certonly -apache –webroot -w /home/www -d yowlab.idv.tw

    說明:
    1. certonly:僅申請憑證,不主動編輯 httpd.conf
    2. –apache:表示使用 Apache httpd 作為網頁伺服器
    3. –webroot :表示自行設定網站細節部份
    4. -w:網站根目錄所在(發證單位仍然要去驗證ACME Challenge file,所以Certbot必須要把驗證檔放在正確的位置)
    5. -d:網域名稱,如果是 www 開頭的話,還得多指定一個去掉 www 的網址

     

    此方法,可以很快申請好 SSL憑證,但是,無法生出「ACME Challenge file」,如此憑證到期時,會無法主動更新憑證。

    所以只好採用「手動」法,一步一步跟著導引走:
    /usr/bin/certbot certonly -apache –manual

    憑證產生之後,所有的憑證檔案都會被放置在 /etc/letsencrypt/live/(網域名稱)/ 目錄裡。
    會產生四個憑證檔案:

    • cert.pem:主要的伺服器憑證
    • privkey.pem:伺服器憑證的私密金鑰 private key,注意:此憑證並未設定密碼)
    • fullchain.pem:完整的憑證鏈,裡面包含所有憑證:伺服器憑證+中繼憑證,所謂的 CA
    • chain.pem:中繼憑證,有些網站伺服器會需要特別安裝。例如:OCSP stapling in Nginx >=1.3.7.

     

  5. 網頁伺服器設定
  6. 將以下這幾行放入 /etc/httpd/conf.d/ssl.conf

    • ServerAlias yowlab.idv.tw
    • Include /etc/letsencrypt/options-ssl-apache.conf
    • SSLCertificateFile /etc/letsencrypt/live/(網域名稱)/cert.pem
    • SSLCertificateKeyFile /etc/letsencrypt/live/(網域名稱)/privkey.pem
    • SSLCertificateChainFile /etc/letsencrypt/live/(網域名稱)/chain.pem
    • SSLCACertificateFile /etc/letsencrypt/live/(網域名稱)/fullchain.pem

     

  7. 重啟網頁伺服器服務
  8. sudo /usr/sbin/apachectl -k graceful

    sudo service httpd restart

    sudo systemctl restart httpd

  9. 憑證到期,自動更新的設定
  10. Let’s Encrypt 所發行的免費 SSL/TLS 憑證,有效期限是 90 天( 3 個月),所以每隔 90 天就要重新申請並更新一次憑證。

    可以每隔 90 天,就手動更新一次。

    也可以讓 certbot 在 90 天憑證到期之時,自動執行更新。

    將底下設定寫入 /etc/crontab 檔案中,並重新啟動 crond 服務:sudo service crond restart sudo systemctl restart crond

    0 0 */90 * * root /usr/bin/certbot renew –quiet –no-self-upgrade –post-hook “/usr/sbin/apachectl -k graceful”

    參數說明:
    1. renew :表示要求更新SSL憑證。
    2. –quiet:不跳出詢問。
    3. –no-self-upgrade:執行程式就好,不更新 Certbot 本身。(預設是自動更新)
    4. –post-hook:指定更新完成後,接著要執行的命令,用雙引號將指令框起來!

     

  11. 移除憑證
    1. 憑證全部移除
    2. sudo certbot delete
      檢查並刪除 /etc/httpd/conf.d/SSL 設定
      檢查並刪除 /etc/letsencrypt/archive, /etc/letsencrypt/live, /etc/letsencrypt/renewal

    3. 直接根據域名刪除
    4. sudo certbot delete –cert-name

後記

  1. 更新完憑證後,網站反應速度突然有飛昇的感覺,原來之前卡住速度的原因是在 ZeroSSL 上。
  2. 弄懂來龍去脈之後,其實,真的很簡單,速度也很快。也許是時代進步,工具也進步了。我早就該自己弄了!

 

參考資源

  1. 入門 – Let’s Encrypt – 免費的 SSL/TLS 憑證
  2. https://letsencrypt.org/zh-tw/getting-started/

  3. Certbot Instructions
  4. https://certbot.eff.org/instructions?ws=apache&os=centosrhel7

  5. User Guide — Certbot 1.29.0 documentation
  6. https://eff-certbot.readthedocs.io/en/stable/using.html#apache

  7. RHEL / CentOS 7 安裝 Let’s encrypt
  8. https://www.ltsplus.com/linux/rhel-centos-7-install-lets-encrypt

  9. 解析 Certbot(Let’s encrypt)使用方式
  10. https://andyyou.github.io/2019/04/13/how-to-use-certbot/

  11. 如何使用certbot自動更新SSL憑證 (CentOS 6,7,8, Ubuntu)
  12. https://www.brilliantcode.net/941/how-to-renew-ssl-certificates-automatically-by-certbot/

  13. 如何使用 Certbot 命令列工具建立免費的 TLS/SSL 頂層網域憑證
  14. https://blog.miniasp.com/post/2021/02/11/Create-SSL-TLS-certificates-from-LetsEncrypt-using-Certbot

  15. HTTPS 簡介及使用官方工具 Certbot 配置 Let’s Encrypt SSL 安全證書詳細教程
  16. https://linuxstory.org/deploy-lets-encrypt-ssl-certificate-with-certbot/zh-tw/

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*