前言Let's Encrypt是全球最大的数字证书认证机构(CA)之一, 也是目前唯一的一个由公益组织运营的机构, 她可以为网站提供免费的SSL/TLS证书. 然而申请的证书只有90天有效期, 到期后需要重新申请.早在2018年Let's Encrypt就宣布其SSL证书支持泛域名了, 其实一直想写这么一篇关于如何申请Let’s Encrypt泛域名证书的教程, 然而鸽了好久都没动静.趁着先前申请的证书过期之际, 便打算使用acme.sh来为博客申请Let's Encrypt泛域名证书, acme.sh可能是众多申请工具中最简单、最智能的, 以后再也不用担心证书会过期了. 现把申请过程整理出来, 以供读者参考.什么是泛域名证书泛域名证书又叫通配符证书, 俗称野卡, 类似*.yindan.me这样的域名证书. 这些证书可以保护一个域名下的所有子域名, 简直不要太便利!什么是 acme.shacme.sh是一个开源的ACME(自动化证书管理环境) 脚本, 可以很方便地从Let's Encrypt生成免费证书, 并实现自动续期.项目主页[button color="dark" icon="fa fa-github" url="https://github.com/Neilpang/acme.sh"]Neilpang/acme.sh[/button]申请步骤安装依赖# CentOS/Redhat yum install curl cron socat -y # Ubuntu/Debian apt-get install curl cron socat -y安装 acme.shcurl https://get.acme.sh | sh安装成功后, 会在当前目录下生成一个.acme.sh文件夹生成证书默认生成的证书都放在安装目录~/.acme.sh/下, 一般不用修改, 如需修改的可在生成之前编辑~/.acme.sh/account.conf里CERT_HOME='~/.acme.sh'的值为自定义文件夹. !> 宝塔面板生成证书后存放的目录是"/www/server/panel/vhost/cert"acme.sh生成证书需要验证域名所有权, 有两种方式: HTTP验证及DNS验证.此处使用DNS验证, 该方式能通过域名解析商提供的API自动添加txt记录完成验证.以CloudFlare为例:登录CloudFlare账号, 再点此获取API key在终端执行下面两个命令, 设置环境变量export CF_Key="你的 CloudFlare API Key" export CF_Email="你的邮箱"第一行CF_Key填写在步骤1里获取的 API Key第二行CF_Email填写自己注册CloudFlare用的邮箱[scode type="yellow"]注意: 不同的域名解析商, 导入的参数是不一样的, 文末附其他常见DNS API设置[/scode]申请泛域名证书acme.sh --issue --dns dns_cf -d yindan.me -d *.yindan.me记得替换成自己的域名.顺利的话, 接下来证书就会自动签发, 并且步骤2中的信息也会保存在~/.acme.sh/account.conf文件中供后续使用, 当申请约有60天时自动更新证书, 无需人工干预.复制证书acme.sh官方文档不推荐直接使用默认安装目录下的文件, 因为这里面的文件都是供其内部使用的, 而且随着更新该目录结构可能会变化. 故应用下列命令将证书复制到自定义文件夹:acme.sh --installcert -d yindan.me -d *.yindan.me \ --key-file /www/server/panel/vhost/ssl/yindan.me/privkey.pem \ --fullchain-file /www/server/panel/vhost/ssl/yindan.me/fullchain.pem \ --reloadcmd "service nginx force-reload"其他操作设置自动升级 acme.sh因acme.sh经常更新, 故推荐打开自动升级功能以保持最新版本.# 自动升级 acme.sh --upgrade --auto-upgrade # 关闭自动升级 acme.sh --upgrade --auto-upgrade 0 # 手动升级 acme.sh --upgrade # 卸载 acme.sh --uninstall自动续签状态查看crontab任务: 执行crontab -l命令, 如果在输出信息中找到类似55 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh"的任务就说明自动续签设置成功.强制更新证书证书未到期时强制更新:"/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --force部署教程宝塔面板部署教程可查看该文章[post cid="101" /]至此, 就可以愉快地把续签任务交给acme.sh, 麻麻再也不用担心我的证书失效啦!附录：常用 DNS API 设置阿里云获取API参数# 设置变量 export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" export Ali_Secret="jlsdflanljkljlfdsaklkjflsa" # 申请证书 acme.sh --issue --dns dns_ali -d example.com -d www.example.com腾讯云/DNSPod(国内版)获取API参数#设置变量 export DP_Id="1234" export DP_Key="sADDsdasdgdsf" #申请证书 acme.sh --issue --dns dns_dp -d example.com -d www.example.comCloudXNS获取API参数# 设置变量 export CX_Key="1234" export CX_Secret="sADDsdasdgdsf" # 申请证书 acme.sh --issue --dns dns_cx -d example.com -d www.exampleGoDaddy获取API参数# 设置变量 export GD_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" export GD_Secret="asdfsdafdsfdsfdsfdsfdsafd" # 申请证书 acme.sh --issue --dns dns_gd -d example.com -d www.exampleAmazon Route53获取API参数# 设置变量 export AWS_ACCESS_KEY_ID=XXXXXXXXXX export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXX # 申请证书 acme.sh --issue --dns dns_aws -d example.com -d www.example.com这里只列举了部分常用的域名解析商API获取方式, 此外诸如linode、he、digitalocean、namesilo、namecom、freedns、yandex之类也是支持的, 点击此处查看更多DNS API设置.