从 LetsEncrypt 获取免费的泛域名 SSL 证书

Apr 27, 2020 • 预计阅读时间 1 分钟

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 类型的记录。

都完成以后,证书就保存在 /etc/letsencrypt/live/lvvme.com 里了:

cert.pem  chain.pem  fullchain.pem  privkey.pem  README

fullchain.pemprivkey.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 ...
NginxDockerUbuntu
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

移除所有 Docker 镜像

更新 Ubuntu 到最新的 LTS 版本