申请 Let’s Encrypt 证书
申请 Let’s Encrypt 证书
这里使用 acme.sh 来配置证书
安装 acme.sh
curl https://get.acme.sh | sh
# 中国 https://github.com/acmesh-official/acme.sh/wiki/Install-in-China
安装在 ~/.acme.sh/
目录下
切换 CA 服务器
acme.sh --set-default-ca --server letsencrypt
获取 dns api
生成证书需要验证域名的所有权,一般有 http 和 dns 两种验证方式,http 验证就是在网站根目录下放置文件,dns 则是添加 dns 记录来验证。
目前泛域名证书仅支持 dns 方式验证。
比如我使用的是 dnspod 来解析域名的,则去 dndpod 申请一套 api token,其他解析运营商也都类似。这样会得到一个 id 和 key。
然后设置为系统环境变量
export DP_Id="xxx"
export DP_Key="xxxx"
其他运行商可以参看这个帖子设置 api token。
https://github.com/acmesh-official/acme.sh/wiki/dnsapi
如果是 cloudflare api token
你需要新建一个 API Token,这个 Token 需要 Zone.Zone 的 Read 权限,和对于各个你需要的 Zone 的 Zone.DNS 的 Write 权限。
Accound ID 在 Dashboard 重定向的网址中可以看到,如: https://dash.cloudflare.com/faaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3 中的 faaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3
生成 证书
~/.acme.sh/acme.sh --issue --dns dns_cf -d aaa.com -d *.aaa.com
这种方式会自动为你的域名添加一条 txt 解析,在验证成功后会删除这个解析记录。这个过程需要等待 120 秒。
证书生成后放在 ~/.acme.sh/aaa.com 文件夹中
注意 –dns 参数,要指定成自己 dns 服务商。
安装证书
domain="domain"
path="/etc/ssl/$domain" # 提前创建好这个目录,并且把权限给给到当前用户,不是给到 root。
./acme.sh --installcert -d $domain \
--key-file $path/$domain.key \
--fullchain-file $path/fullchain.cer
这里是把之前生成的证书复制到指定的放置证书的目录,然后设定让 web 服务器重启的命令。
同样这些目录地址都会被 acme 记录下来,在更新证书的时候用到。
不要直接使用 acme 目录下的证书文件,那个目录结构可能会改变。
更新证书
acme 官方说明的是在 60 天会自动更新证书,因为安装 acme 的时候已经在 crontab 添加了定时任务。
配置 nginx
在 nginx 下配置好证书地址就可以了。
更新 acme.sh
~/.acme.sh/acme.sh --upgrade
查看日志
acme.sh --issue .... -- debug
其他
dns api 的信息记录在 ~/.acme.sh/account.conf
指定的证书文件存放地址记录在 ~/.acme.sh/<your domain>/<your domain>.conf
问题
Usage: _hmac hashalg secret [outputhex]
因为本机的 openssl 版本比较老导致,可以升级 openssl 解决,也可以切换成 letencrypt 服务器申请证书来解决。
Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 60
Lets Encrypt acme serve 更改了它在9月30日使用的证书链,以更好地解决DST根CA X3根证书过期的问题。
可以手动将证书下载到本地,也可以临时去掉安全检查 .acme.sh --insecure