运维|https免费泛域名证书申请

【运维|https免费泛域名证书申请】acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.
主要步骤:

  1. 安装 acme.sh
  2. 生成证书
  3. copy 证书到 nginx/apache 或者其他服务
  4. 更新证书
  5. 更新 acme.sh
  6. 出错怎么办, 如何调试
下面为作者自己搭建时步骤的详细介绍,也可以直接参考acmesh-官方的说明进行安装
1、安装证书申请工具
curl https://get.acme.sh | sh

这个命令后会将acme.sh安装到~/.acme.sh/目录下,重新载入~/.bashrc

source ~/.bashrc

2021-10-09补充:
由于新版本作者默认使用了新的服务器(参见:acmesh-官方Wiki),所以后续执行命令会限制-d的域名参数个数,在执行后续命令前,使用以下命令指定旧服务器后即可:
acme.sh--set-default-ca--server letsencrypt

每次更新后都需要优先执行此语句
2、开始申请
2.1、方法一
  • 设置DNS,执行申请(将以下命令中的qbly.top换成自己的一级域名):
    acme.sh --issue -d qbly.top -d *.qbly.top --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please


    执行响应:
    [Sun May 26 14:33:52 HKT 2019] Creating domain key [Sun May 26 14:33:52 HKT 2019] The domain key is here: /root/.acme.sh/qbly.top/qbly.top.key [Sun May 26 14:33:52 HKT 2019] Multi domain='DNS:qbly.top,DNS:*.qbly.top' [Sun May 26 14:33:52 HKT 2019] Getting domain auth token for each domain [Sun May 26 14:34:03 HKT 2019] Getting webroot for domain='qbly.top' [Sun May 26 14:34:03 HKT 2019] Getting webroot for domain='*.qbly.top' [Sun May 26 14:34:03 HKT 2019] Add the following TXT record: [Sun May 26 14:34:03 HKT 2019] Domain: '_acme-challenge.qbly.top' [Sun May 26 14:34:03 HKT 2019] TXT value: 'CFqIh5XQRdN7_DKzGqqLp8DJ-g9mB86zMl1fzi2TeuY' [Sun May 26 14:34:03 HKT 2019] Please be aware that you prepend _acme-challenge. before your domain [Sun May 26 14:34:03 HKT 2019] so the resulting subdomain will be: _acme-challenge.qbly.top [Sun May 26 14:34:03 HKT 2019] Add the following TXT record: [Sun May 26 14:34:03 HKT 2019] Domain: '_acme-challenge.qbly.top' [Sun May 26 14:34:03 HKT 2019] TXT value: 'Bo0VhbDQjyVISgEEwce8Ul1bVL6U1E6whfoKY-V9Cgk' [Sun May 26 14:34:03 HKT 2019] Please be aware that you prepend _acme-challenge. before your domain [Sun May 26 14:34:03 HKT 2019] so the resulting subdomain will be: _acme-challenge.qbly.top [Sun May 26 14:34:03 HKT 2019] Please add the TXT records to the domains, and re-run with --renew. [Sun May 26 14:34:03 HKT 2019] Please add '--debug' or '--log' to check more details. [Sun May 26 14:34:03 HKT 2019] See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh

  • 根据返回数据,T给域名添加XT记录后执行(TXT记录的值为上一个命令执行后日志中的TXT value)
    acme.sh --renew -d qbly.top -d *.qbly.top --yes-I-know-dns-manual-mode-enough-go-ahead-please

  • 在目录下会生成一个 qbly.top 的文件夹, 里面有证书和密钥
2.2、方法二 (推荐)
  • 参考地址:https://github.com/acmesh-official/acme.sh/wiki/DNS-alias-mode 若域名支持DNS api 则点击此链接并点击右侧dnsapi菜单,查询域名对应的accesskey
  • 然后把自己的id和key 配置成环境变量。
    如:我使用的是阿里云的域名,查询到dnsapi授权后按如下命令分别加入环境变量(Ali_key、Ali_Secret中的Ali和接下来执行的申请证书命令中的dns_ali对应,这很重要)
    export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje1" export Ali_Secret="jlsdflanljkljlfdsaklkjflsaa"

  • 最后直接运行申请证书命令, 会自动在你的dnspod 后台解析一条txt记录,可先登录域名后台查验cname解析, 并完成申请证书。(以下命令中的s1.qbly.top、s2.qbly.top为同时支持这两个二级域名的证书,添加多个时,使用“-d *.aa.myyuming.com”的格式)
    acme.sh --issue -d qbly.top -d *.qbly.top -d *.s1.qbly.top -d *.s2.qbly.top --domain-alias myalias.qbly.top --dns dns_ali --log

    2.3 方法三
    acme.sh --issue -d qbly.top -d *.qbly.top --nginx

    3、复制证书
    • 将刚才生成的证书复制到对应的nginx的ssl目录,并重启nginx
      acme.sh --installcert -d qbly.top --key-file /etc/nginx/ssl/qbly.top/qbly.top.key --fullchain-file /etc/nginx/ssl/qbly.top/qbly.top.cer --reloadcmd "service nginx force-reload"


    4、证书更新
    证书有效期是 90 天的,需要定期重新申请,不过acme在安装的时候就已经设置了自动更新,所以这一步不用关心,很省心。
手动更新命令:
acme.sh --cron -f

5、设置软件自动更新
acme.sh --upgrade --auto-upgrade


    推荐阅读