使用acme生成免费证书,使用DNS的验证方式生成的证书,可以添加泛解析ssl证书。
hithub地址:https://github.com/acmesh-official/acme.sh
1, 安装acme.sh
执行命令:
curl https://get.acme.sh | sh
由于是从github下载文件,所以第一次可能安装失败,可以多执行几次,或者从这里下载安装:https://gitee.com/neilpang/acme.sh
安装成功后,会自动生成一条定时任务,可执行crontab -l 查看。
33 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
2, DNS方式生成证书
有多种方式生成证书,但是只有DNS方式是支持泛域名的,所以这里只对DNS方式做说明,其他方式参见官方文档
a, 手动 dns 方式, 手动在域名上添加一条 txt 解析记录, 验证域名所有权
使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。
执行命令,生成证书
acme.sh --issue --dns -d your_domain.com \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
acme.sh 会生成相应的解析记录显示出来, 只需要在你的域名管理面板中添加这条 txt 记录即可.
等待解析完成之后,执行命令,重新生成证书:
acme.sh --renew -d your_domain.com \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
b, 自动添加txt记录 (推荐)
dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.
acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成.
以阿里云为例,需要先登录到阿里云账号, 生成 key 和 secret(建议用子账号申请,开通子账户用户解析dns能力), 都是免费的. 然后执行命令完成配置:
export Ali_Key="xxxxxx"
export Ali_Secret="xxxxx"
执行命令,生成泛域名证书:(会自动在域名所属服务器添加解析记录:_acme-challenge)
acme.sh --issue --dns dns_ali -d your_domain.com -d *.your_domain.com
3,copy/安装 证书
前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.
正确的使用方法是使用 --install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:
Nginx example:
acme.sh --install-cert -d your_domain.com \
--key-file /path/to/keyfile/in/nginx/key.pem \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "service nginx force-reload"
(一个小提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload)
Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/<your_domain>.cer ,否则 SSL Labs 的测试会报 Chain issues Incomplete 错误。
网友评论