證書除了可以選擇自簽之外,還有一些免費證書可以申請,比較流行的有 Let's Encrypt 。使用工具申請證書會方便許多(當然也可以手動),申請工具就有很多了,有 Certbot、acme.sh,這裡選擇 acme.sh 進行演示。
# acme.sh 容器安裝
- 安裝 acme.sh 容器
docker pull neilpang/acme.sh | |
docker run -it \ | |
--net=host \ | |
--name=acme \ | |
-v /home/docker/acme:/acme.sh \ | |
neilpang/acme.sh daemon |
/home/docker/acme 這個路徑是申請完成之後證書存放的路徑,可根據需求進行修改daemon 此選項是用於守護進程,如果使用自動續簽證書會用到,這裡暫不展開討論
# 更改默認簽發機構為 Let's Encrypt
繼 acme.sh 被商業收購之後,官方文檔已明確說明更換默認證書辦法機構為 ZeroSSL(此前為 Let's Encrypt),雖然對一般使用者來說並不會產生影響,甚至 ZeroSSL 還比 Let's Encrypt 提供了更完善的 API。
但個人還是更傾向於網際網路安全研究小組(ISRG)運營的 Let's Encrypt,畢竟一個是由非盈利機構運營,另一個則是商業公司運營。
- 更改默認簽發機構為 Let's Encrypt
docker exec -it acme --set-default-ca --server letsencrypt |
# DNS 手動模式申請證書
- 第一次先執行
acme.sh --issue -d *.example.com --dns \ | |
--yes-I-know-dns-manual-mode-enough-go-ahead-please |
*.example.com : 其中的 * 是萬用字元,用於申請 example.com 域名的泛域名證書--yes-I-know-dns-manual-mode-enough-go-ahead-please : 後面這一句不能去掉,要一起執行,否則會報錯的
命令執行完成後會在終端打印用於添加 TXT 記錄的「名稱」和「內容」,根據剛才打印的內容添加申請證書域名的 TXT 記錄,等待解析生效
可用以下命令驗證解析是否生效
nslookup -type=txt example.com |
其中 example.com 更換為添加 TXT 解析記錄的域名
- 確認 TXT 解析記錄生效後,以
--renew重新執行命令
acme.sh --renew -d *.example.com \ | |
--yes-I-know-dns-manual-mode-enough-go-ahead-please |
- 命令執行完成後,會在之前設定的
/home/docker/acme路徑下生成證書fullchain.cer和密鑰example.com.key檔案