lvvme.com 是单域名,*.lvvme.com 是泛域名。如果自己的网站除了主域名外还有类似与 img.lvvme.com、 file.lvvme.com 之类的子域名,使用泛域名证书是比较好的选择。
LetsEncrypt 也支持泛域名证书了,申请和配置都比较简单。
获取证书
sudo apt-get install certbot
命令比较长,用脚本辅助一下 get-cert.sh
#!/bin/sh
set -e
sudo certbot --duplicate certonly -d "*.$1" -d "$1" --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
get-cert.sh lvvme.com
根据提示配置好域名的 DNS,需要配置两个 TEXT 类型的记录。
提示:一定要确认 TXT 记录已经生效了再继续下一步,否则会失败,一个简单的方法是添加了 TXT 记录以后使用 dig
命令查询:
dig txt _acme-challenge.lvvme.com
查询结果可以找到 TXT 区段就说明生效了:
; <<>> DiG 9.10.6 <<>> txt _acme-challenge.lvvme.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25452
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 19
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;_acme-challenge.lvvme.com. IN TXT
;; ANSWER SECTION:
_acme-challenge.lvvme.com. 600 IN TXT "rlCEXLl8gTyv3OjV2oSm7C0A8yeAJF7RkBkbUBo2oJM"
_acme-challenge.lvvme.com. 600 IN TXT "tQk-UWAb6rtbFp8YxCgdWcBBcqRPj5GAhzhL9oxjA00"
都完成以后,证书就保存在 /etc/letsencrypt/live/lvvme.com
里了:
cert.pem chain.pem fullchain.pem privkey.pem README
fullchain.pem
和 privkey.pem
就是 Nginx 需要的公钥和私钥。
配置 Nginx
如果 Nginx 是运行在 Docker 里的话,需要注意 live/lvvme.com 目录里的文件是符号链接,实际文件保存在 archive
目录里:
cert.pem -> ../../archive/lvvme.com/cert1.pem
chain.pem -> ../../archive/lvvme.com/chain1.pem
fullchain.pem -> ../../archive/lvvme.com/fullchain1.pem
privkey.pem -> ../../archive/lvvme.com/privkey1.pem
README
nginx.conf 的配置要这么写:
http {
...
listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/lvvme.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/lvvme.com/privkey.pem;
...
}
docker 需要做 /etc/letsencrypt
的目录映射,才能正确的找到证书:
docker run -v /etc/letsencrypt:/etc/letsencrypt ...