Let’s Encrypt 是一个数字证书认证机构,旨在推广全民万维网服务器加密连接,为安全网站提供免费的 SSL/TLS 证书。Let’s Encrypt 签发的免费证书有效期为3个月。这里我使用 acme.sh 来申请和续期 Let’s Encrypt 的证书。
环境约定
- CentOS 7.7 1908
安装 acme.sh
acme.sh 使用 cron 创建计划任务来续期证书,在安装 acme.sh 之前先安装 cron
$ yum install cronie -y
$ systemctl start crond
$ systemctl enable crond
接着就可以来安装 acme.sh 了
$ curl https://get.acme.sh | sh
安装成功后执行 source ~/.bashrc
更新环境变量
生成证书
这里我采用 dns mode 申请证书,以解决 standalone mode 需要 socat 占用 80 端口的困扰。我的域名解析托管在 Cloudflare ,其他解析商请参考 acme.sh 项目的 READEME.md。使用 dns mode 首先需要获取 Cloudflare 账户的 API Key,具体方法如下图
接着进入终端
$ export CF_Key="API_KEY"
$ export CF_Email="EMAIL"
$ acme.sh --issue --dns dns_cf -d example.com -d www.example.com
Let’s Encrypt 也支持申请通配符证书
$ acme.sh --issue --dns dns_cf -d example.com -d *.example.com
在 source ~/.bashrc
后还报错没有找到 acme.sh 命令,可以尝试手动添加别名
alias acme.sh=~/.acme.sh/acme.sh
安装证书
默认申请的证书放置在 ~/.acme.sh/
下,但不要直接使用此目录下的证书,以免破坏目录结构。正确的方法是使用 --installcert
参数复制证书至相应的目录
创建用于存放证书的目录
$ mkdir /etc/nginx/ssl
在编辑完 HTTP 服务器配置文件后再复制证书。关于 Nginx HTTPS 及 HTTP2 的配置可以参考这篇文章。
$ acme.sh --install-cert -d epnode.com \
--cert-file /etc/nginx/ssl/cert.pem \
--key-file /etc/nginx/ssl/key.pem \
--fullchain-file /etc/nginx/ssl/fullchain.pem \
--reloadcmd "systemctl force-reload nginx"
Nginx 的 reload
参数并不会重载证书,应使用 force-reload
瞎折腾 macOS acme.sh Let's Encrypt SSL
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!