Let’s Encrypt 推出免費 SSL 憑證,讓想使用 SSL 的網站節省不少成本,而且使用 Let’s Encrypt 提供的客戶端申請及 renew 憑證,比起在網上購買更加方便。雖然 Let’s Encrypt 的憑證每次只可以申請 3 個月,但可以使用 crontab 自動 renew 憑證,使用上也是很方便。以下介紹在 RHEL 及 CentOS 7 安裝 Let’s Encrypt 客戶端 Certbot,及使用 Certbot 申請及 renew 憑證 的方法。
1. 安裝 Certbot:
在 CentOS 7 要安裝 Certbot, 只要啟用 EPEL 便可以用 yum 安裝,如果沒有啟動 EPEL Repo, 執行以下指令啟用:
然後用 yum 安裝所需套件,以下假設設定 Apache 支援 SSL, 需要安裝 mod_ssl:
現在可以安裝 Certbot:
2. 取得憑證
現在假設要申請 www.mydomain.com 及 mydomain.com 的憑證,先要在 DNS Server 將以上 hostname 指向伺服器的 IP,Let’s Encrypt 也會用 hostname 驗證是否域名持有人,而假設網頁的目錄在 /var/www/html, 可以執行以下指令:
1 |
# certbot certonly --webroot -w /var/www/html -d www.mydomain.com -d mydomain.com --email <YOUR_EMAIL_ADDRESS> --agree-tos |
當驗證成功後,SSL 憑證, private key 及 LE chain 會放在 /etc/letsencrypt/live/www.mydomain.com/ 下面。
3. 設定 Apache
開啟檔案 /etc/httpd/conf.d/ssl.conf:
找到 SSLCertificateFile, SSLCertificateKeyFile 及 SSLCACertificateFile 這 3 行,這 3 行是分開的,改成這樣:
1 2 3 |
SSLCertificateFile /etc/letsencrypt/live/www.mydomain.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.mydomain.com/privkey.pem SSLCACertificateFile /etc/letsencrypt/live/www.mydomain.com/fullchain.pem |
最後重新啟動 Apache 便會生效:
4. 設定自動 renew SSL 憑證
Let’s Encrypt 憑證目前的有效期只有 3 個月,在憑證到期前 1 個月可以 renew以下設定自動 renew 憑證,以下是更新憑證的指令:
1 |
certbot renew --quiet --agree-tos --post-hook "systemctl reload httpd" |
以上指令會自動更新所有 SSL 憑證,如果成功更新,會執行 “systemctl reload httpd” 這條指令,讓 apache 重新載入新憑證。
為了日後方便管理,建立一個 renew SSL 的 Shell Script:
加入以下內容:
1 2 |
#!/bin/sh /usr/bin/certbot renew --quiet --agree-tos --post-hook "systemctl reload httpd" |
然後把上面 Shell Script 加入可執行權限及放到 crontab:
加入 crontab
加入以下一行:
1 |
0 3 * * * /root/renew.sh > /dev/null 2>&1 |
這樣 certbot 便會在每天凌晨 3:00 自動檢查及更新憑證。