银弹博客 - acme.sh
type: channel
link: https://www.yindan.me/tag/acme-sh/
items: 使用acme.sh申请及续签Let's Encrypt SSL泛域名证书教程

使用acme.sh申请及续签Let's Encrypt SSL泛域名证书教程
type: item
date: 2019-05-04T22:40:00+08:00
description: 前言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 …