系統: Centos 7
需求: 包含自行管理DNS的網域(bind)以及免費 no-ip網域, 若為其它代管業者可以到certbot查詢是否有範本或plugin.
安裝
在提供服務的主機
yum install certbot
yum install python2-pip
DNS若為自行管理, 需要安裝 certbot-dns-rfc2136 PLUGIN以自動更新DNS TXT RECORD讓 Let’s Encrypt 確認您擁有網域管理權
pip install certbot-dns-rfc2136
設定
在提供服務的主機上新增 /etc/letsencrypt/rfc2136.ini 檔案, 檔案權限須為0600, 內容如下
# Target DNS server
dns_rfc2136_server = 10.0.0.1
# Target DNS port
dns_rfc2136_port = 53
# TSIG key name
dns_rfc2136_name = rndckey
# TSIG key secret
dns_rfc2136_secret = mP1z2QD3R156ULti97TbdsRbPBcxe8zoBlaBla
# TSIG key algorithm
dns_rfc2136_algorithm = HMAC-MD5
TSIG Key 是用來更新 named.conf 中區域的字串 , 產生方式如下
dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST rndckey
修改 DNS 管理主機上的 named.conf , 指定需要自動更新的ZONE & 增加控制的TSIG KEY
key rndckey {
algorithm hmac-md5;
secret “mP1z2QD3R156ULti97TbdsRbPBcxe8zoBlaBla”;
};
zone “example.com” {
type master;
file “/var/named/example.com.hosts”;
allow-update {
key “rndckey”;
};
};
若考慮安全性可用 update-policy 取代 allow-update, 但需要Bind9以上的版本
測試是否能動態更新DNS
certbot certonly –dry-run –dns-rfc2136 –dns-rfc2136-credentials /etc/letsencrypt/rfc2136.ini –dns-rfc2136-propagation-seconds 30 -d example.com -d *.example.com
若訊息顯示沒有問題就可以以正式取得憑證
certbot certonly –dns-rfc2136 –dns-rfc2136-credentials /etc/letsencrypt/rfc2136.ini –dns-rfc2136-propagation-seconds 30 -d example.com -d *.example.com
若為no-ip 網域因無法使用DNS驗證則測試方式改為(非wildcard憑證)
certbot certonly –dry-run –webroot -w /var/www/html -d yourdomain.no-ip.com
正式取得
certbot certonly –webroot -w /var/www/html -d yourdomain.no-ip.com
申請完成後因為憑證期限為3個月 所以我們需要排成3個約一次執行該指令 另外需要重啟相關使用憑證的服務, 例如:
certbot certonly –dns-rfc2136 –dns-rfc2136-credentials /etc/letsencrypt/rfc2136.ini –dns-rfc2136-propagation-seconds 30 -d example.com -d *.example.com –post-hook ‘systemctl restart httpd;systemctl restart dovecot;systemctl restart sendmail’
如果管理的網域很多也可以直接使用 certbot renew , 但因為certbot版本更新很快, 不是很確定所有狀況 renew 都可以正確更新 , 所以這邊直接使用完整指令更新
參考文獻:
https://certbot-dns-rfc2136.readthedocs.io/en/stable/
https://certbot.eff.org/docs/using.html?highlight=renew
https://evermeet.cx/wiki/Let%27s_Encrypt_with_Apache,_dovecot,_and_sendmail