本文将介绍如何利用acme.sh申请免费的HTTPS/SSL证书
说明
- 本文仅供学习交流使用,如果本文与官方文档有出入,请以官方文档为准
- 新版acme.sh的默认提供商已从letsencrypt改为了ZeroSSL,所以需要去zeroSSL官网先注册一个账号,当然你也可以用回letsencrypt,这个就无需注册,后面会讲到如何切换提供商,请自行翻看
安装脚本
1 | curl https://get.acme.sh | sh -s [email protected] |
或
1 | wget -O - https://get.acme.sh | sh -s [email protected] |
生成证书
acme.sh提供两种方式,一个是HTTP,一个是DNS,如果需要申请泛域名证书,如*.youdomain.com
则只能选择DNS模式
HTTP模式
HTTP方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了,所以需要先部署一个可访问的服务,然后用以下命令申请
1 | acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot 网站根目录(如:/home/wwwroot/mydomain.com/) |
如果是nginx或apache部署的可以使用以下命令
1 | acme.sh --issue -d mydomain.com --(nginx或apache) |
acme.sh 会智能的从对应服务器配置中自动完成验证
DNS模式
DNS方式是在域名上添加一条 txt 解析记录, 验证域名所有权
CF
- 1、申请CF_Token:访问cloudflare 个人账户,点击创建令牌,使用
编辑区域 DNS
模板,进行如下配置:然后点击下一步预览,在下一步即可生成复制备用1
2
3
4
5
6
7
8权限:
区域 DNS 编辑
账户 账户设置 读取
区域 区域 读取
账户资源:
包括 您的账户
区域资源:
包括 特定资源 选中特定域名 - 2、获取CF_Account_ID:打开cloudflare,链接后面那串就是所需要的id,复制备用
- 3、连接SSH然后输入:然后就是等待,成功的话你会看到一堆success
1
2
3export CF_Token="你准备的CF_Token"
export CF_Account_ID="你准备的CF_Account_ID"
acme.sh --issue --dns dns_cf -d youdomain.com # 通配符可填写*.youdomain.com
DNSPOD
- 1、登陆自己的 DNSPod 帐户,点击自己头像,选择密钥管理,添加一个密钥,将 ID 和 Token 记录下来
- 2、连接SSH然后输入
1
2
3export DP_Id="你准备的id"
export DP_Key="您准备的Token"
acme.sh --issue --dns dns_dp -d youdomain.com -d *.youdomain.com
copy/安装 证书
acme.sh默认生成的证书都放在安装目录下: ~/.acme.sh/, 官方建议不要直接使用此目录下的文件,最好使用--install-cert
命令,并指定目标位置, 然后证书文件会被copy到相应的位置,以下是nginx例子:
1 | acme.sh --install-cert -d youdomain.com --key-file 你的证书存放路径/cert.key --fullchain-file 你的证书存放路径/cert.pem --reloadcmd "service nginx force-reload" |
查看已安装证书信息
1 | acme.sh --info -d youdomain.com |
切换证书提供商
acme.sh支持多个CA提供商,包括但不限于:ZeroSSL.com CA(default)、Letsencrypt.org CA、BuyPass.com CA、SSL.com CA、Google.com Public CA,如果想把默认提供商切换成letsencrypt
则使用以下命令
1 | acme.sh --set-default-ca --server letsencrypt |
只是申请某个域名证书使用请请使用:
1 | acme.sh --issue --dns dns_cf -d youdomain.com --server letsencrypt |
更新证书
目前acme.sh会自动更新, 你无需任何操作。工作原理主要是使用系统定时任务执行脚本相关任务,如果想查看可以使用以下命令:
1 | crontab -l |
更新脚本
手动升级到最新版 :
1 | acme.sh --upgrade |
如果你不想手动升级, 可以开启自动升级:
1 | acme.sh --upgrade --auto-upgrade |
之后,acme.sh就会自动保持更新了。
如果你想关闭自动更新:
1 | acme.sh --upgrade --auto-upgrade 0 |
其他
- export命令导出相关参数只会在创建的时候展示,后续不会展示,请注意保存
- 通过export命令导出的可复用的值会保存在
~/.acme.sh/account.conf
- 如果执行acme.sh报错,可以使用全路径
/root/.acme.sh/acme.sh
我的nginx配置
1 | server { |