早就該面對與學習解決的問題,這一天,終究還是來了。
因為資安以及一些議題,所以網站資料使用 SSL/TLS 來加解密傳輸,早已是標準必備。
而好心的 ZeroSSL公司免費提供給本網站一年免費的憑證服務也到期,實在也不好總是四處尋覓免費專案,想想還是直接申請使用 Let’s Encrypt 所提供的免費 SSL/TLS 憑證來使用好了。(註:Let’s Encrypt 是一個免費及開放的提供憑證的機構(CA))
在此誠心感謝好心的 ZeroSSL 公司 以及偉大的 Let’s Encrypt 組織免費提供給大家的 SSL 憑證 資源!
我的目標是要申請與使用 Let’s Encrypt 所發行的免費 SSL/TLS 憑證,在經過一番研究之後,發現目前大家幾乎都是使用Certbot來申請憑證,所以我也跟著來使用。
- 安裝 Certbot
- 使用 Certbot 申請憑證
- 全自動 (自備 HTTP 伺服器) — certbot
- 半自動(自備 HTTP 伺服器,不調整 HTTP 伺服器設定)– certbot certonly
- webroot (自備 HTTP 伺服器,自行設定 acme-challenge 部分) — certbot certonly –webroot
- 手動(自備 HTTP 伺服器 、其他主機)– certbot certonly –manual
- DNS 套件 — certbot certonly –dns-PLUGIN
- Standalone(Certbot 提供獨立 HTTP 伺服器部分)– certbot certonly –standalone
- certonly:僅申請憑證,不主動編輯 httpd.conf
- –apache:表示使用 Apache httpd 作為網頁伺服器
- –webroot :表示自行設定網站細節部份
- -w:網站根目錄所在(發證單位仍然要去驗證ACME Challenge file,所以Certbot必須要把驗證檔放在正確的位置)
- -d:網域名稱,如果是 www 開頭的話,還得多指定一個去掉 www 的網址
- cert.pem:主要的伺服器憑證
- privkey.pem:伺服器憑證的私密金鑰 private key,注意:此憑證並未設定密碼)
- fullchain.pem:完整的憑證鏈,裡面包含所有憑證:伺服器憑證+中繼憑證,所謂的 CA
- chain.pem:中繼憑證,有些網站伺服器會需要特別安裝。例如:OCSP stapling in Nginx >=1.3.7.
- 網頁伺服器設定
- 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
- 重啟網頁伺服器服務
- 憑證到期,自動更新的設定
- renew :表示要求更新SSL憑證。
- –quiet:不跳出詢問。
- –no-self-upgrade:執行程式就好,不更新 Certbot 本身。(預設是自動更新)
- –post-hook:指定更新完成後,接著要執行的命令,用雙引號將指令框起來!
- 移除憑證
- 憑證全部移除
- 直接根據域名刪除
目前許多系統的套件管理程式都已將 Certbot 包進去,但若想使用最新版本者,或是不清楚者,可以參考 https://certbot.eff.org/ 的引導來進行安裝。
我的網站系統是 CentOS 7 系列,所以可以不管上面講什麼,直接透過 yum 套件管理系統安裝。
先搜尋有哪些可以安裝的程式(套件)組,在命令 yum search certbot 後,可以看到相關的程式(套件)組,又我的網頁伺服器是使用 Apache httpd 。
yum -y install certbot python2-certbot-apache python2-certbot openssl mod_ssl
Certbot 可依據不同的狀況提供不同作法,基本上分成「單純取得憑證」和「自動化取得憑證」搭配「是否自動設定伺服器」的部分就產生多種作法。如果要支援自動化就必須通過 acme-challenge(http-01 或 dns-01 )驗證,設定流程複雜的部分多來自於驗證階段的設定。
大致分成以下幾種:
讀了參考文件後,一開始採用自行設定法:
/usr/bin/certbot certonly -apache –webroot -w /home/www -d yowlab.idv.tw
說明:
此方法,可以很快申請好 SSL憑證,但是,無法生出「ACME Challenge file」,如此憑證到期時,會無法主動更新憑證。
所以只好採用「手動」法,一步一步跟著導引走:
/usr/bin/certbot certonly -apache –manual
憑證產生之後,所有的憑證檔案都會被放置在 /etc/letsencrypt/live/(網域名稱)/ 目錄裡。
會產生四個憑證檔案:
將以下這幾行放入 /etc/httpd/conf.d/ssl.conf 中
sudo /usr/sbin/apachectl -k graceful
或
sudo service httpd restart
或
sudo systemctl restart httpd
Let’s Encrypt 所發行的免費 SSL/TLS 憑證,有效期限是 90 天( 3 個月),所以每隔 90 天就要重新申請並更新一次憑證。
可以每隔 90 天,就手動更新一次。
也可以讓 certbot 在 90 天憑證到期之時,自動執行更新。
0 0 */90 * * root /usr/bin/certbot renew –quiet –no-self-upgrade –post-hook “/usr/sbin/apachectl -k graceful”
參數說明:
sudo certbot delete
檢查並刪除 /etc/httpd/conf.d/SSL 設定
檢查並刪除 /etc/letsencrypt/archive, /etc/letsencrypt/live, /etc/letsencrypt/renewal
sudo certbot delete –cert-name
後記
- 更新完憑證後,網站反應速度突然有飛昇的感覺,原來之前卡住速度的原因是在 ZeroSSL 上。
- 弄懂來龍去脈之後,其實,真的很簡單,速度也很快。也許是時代進步,工具也進步了。我早就該自己弄了!
參考資源
- 入門 – Let’s Encrypt – 免費的 SSL/TLS 憑證
- Certbot Instructions
- User Guide — Certbot 1.29.0 documentation
- RHEL / CentOS 7 安裝 Let’s encrypt
- 解析 Certbot(Let’s encrypt)使用方式
- 如何使用certbot自動更新SSL憑證 (CentOS 6,7,8, Ubuntu)
- 如何使用 Certbot 命令列工具建立免費的 TLS/SSL 頂層網域憑證
- HTTPS 簡介及使用官方工具 Certbot 配置 Let’s Encrypt SSL 安全證書詳細教程
https://letsencrypt.org/zh-tw/getting-started/
https://certbot.eff.org/instructions?ws=apache&os=centosrhel7
https://eff-certbot.readthedocs.io/en/stable/using.html#apache
https://www.ltsplus.com/linux/rhel-centos-7-install-lets-encrypt
https://andyyou.github.io/2019/04/13/how-to-use-certbot/
https://www.brilliantcode.net/941/how-to-renew-ssl-certificates-automatically-by-certbot/
https://blog.miniasp.com/post/2021/02/11/Create-SSL-TLS-certificates-from-LetsEncrypt-using-Certbot
https://linuxstory.org/deploy-lets-encrypt-ssl-certificate-with-certbot/zh-tw/