今天介绍一下 如何使用开源代码(acmesh-official)的acme.sh给各种需要tls的场景申请可信证书(90天续一次)。
必要前提: 你必须要拥有一个可控的域名
以debian为例写一个简单可用的教程,理论上linux都能用。
文章中提到的 mydomain.com 须替换成你自己的域名
1.下载并配置acme.sh环境(demo@mydomain.com 修改成你的邮箱)
curl https://get.acme.sh | sh -s email=demo@mydomain.com
如果出现 Install success 类似字样则说明配置成功;如果邮箱写错了,可以编辑 $HOME/.acme.sh/account.conf 进行修改。
2.查看是否开启自动续期
crontab -l
如果出现 “/root/.acme.sh”/acme.sh –cron –home “/root/.acme.sh” > /dev/null
类似字样则表明已经开启自动续期
3.使环境配置立即生效
source ~/.bashrc
4.配置证书申请源 (zerossl letsencrypt buypass ssl.com google)
建议zerossl,因为letsencrypt越来越不被信任。
acme.sh --set-default-ca --server zerossl
如果出现 Changed default CA to: https://acme.zerossl.com/v2/DV90 类似字样则说明切换成功
证书申请分为两种
手动申请
步骤1
acme.sh --issue --dns -d mydomain.com -d *.mydomain.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
返回信息
Domain: ‘acme-challenge.mydomain.com’
TXT value: ‘校验码’
这个TXT出现几次就添加几条acme-challenge的TXT解析记录
大约过10分钟左右(跟域名托管商有关)
步骤2
acme.sh --renew --dns -d mydomain.com -d *.mydomain.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
如果出现 Cert success 类似字样则表明申请成功。
生成的证书文件都在以下目录中
$HOME/.acme.sh/mydomain.com_ecc/mydomain.com.key Key文件
$HOME/.acme.sh/mydomain.com_ecc/mydomain.com.cer
$HOME/.acme.sh/mydomain.com_ecc/ca.cer
$HOME/.acme.sh/mydomain.com_ecc/fullchain.cer 完整证书链
一般只需要用到mydomain.com.key 和 fullchain.cer
自动申请
acme.sh代码中 https://github.com/acmesh-official/acme.sh/tree/master/dnsapi 提供了很多域名托管商API接口,一般sh文件开头的几行会有需要提供的变量信息
这里以cloudflare为例 需要提供的环境变量如下:
export CF_Token=""
export CF_Account_ID=""
export CF_Zone_ID=""
或
export CF_Key=""
export CF_Email=""
然后执行
acme.sh --issue --dns dns_cf -d mydomain.com -d *.mydomain.com
同样会出现 success 类似字样的返回信息
手动申请和自动申请生成结果一样,证书都在同一个位置。
这个tls证书申请成功后,可以运用到各种tls的场景中,不需要再 忽略证书校验 等操作,客户端服务端做到完全可信。
最后啰嗦一下:这个证书是90天一续,一定要准时检查,看是否自动续期成功。
$HOME是环境变量指向的是用户主目录,一般为/root
今天主要介绍的是如何申请可信证书和自动续期,如果有把证书部署到nginx等场景需求的建议去 https://github.com/acmesh-official/acme.sh 查看相应文档。
Good luck to all