type
status
date
slug
summary
tags
category
icon
password
URL
本文将介绍使用 acme.sh 配置自动续签的 SSL 证书。
之前介绍了 Nginx 和 Apache 手工配置 SSL 证书的方法,美中不足的是,基本上大多数商业 SSL 证书都需要手工申请和签发,能支持 ACME 自动签发的并不多,有也略贵,比如 ZeroSSL 高级版和 Digicert 等,那么对于大多数懒人来说,免费的 Let's Encrypt、Buypass 和 ZeroSSL 免费版就是不错的选择。
自动签发和手工签发证书的对比
功能 | 自动签发 | 手工签发 |
有效期 | 3 个月至 6 个月 | 30 天到 1 年 |
难度 | 不容易 | 容易 |
友好度 | 不友好 | 友好 |
适合懒人 | 是 | 否 |
系统集成 | 方便 | 不方便 |
后台管理 | 大多数没有 | 大多数都有 |
所以我们建议如果您对服务器有完全控制权,那么自动签发的证书比较适合懒人运维,如果是长期运营的网站和项目,手工签发的证书对新手更友好,请自行选择。
安装 acme.sh
如果是国内的机器,可以使用拖回源码直接安装:
请注意替换
username@example.com 为你自己的邮箱,避免无法收到上游证书的邮件通知,比如 Let's Encrypt 偶尔会错发证书,然后就会邮件通知你,这时候就需要重新签发一次证书了。安装完成后重新加载 Bash:
然后也可以开启自动更新:
选择默认 CA
目前 acme.sh 支持 5 个正式环境 CA,分别是 Let's Encrypt、Buypass、ZeroSSL、SSL.com 和 Google Public CA,默认使用 ZeroSSL,如果需要更换可以使用如下命令:
切换 Let's Encrypt
切换 Buypass
切换 ZeroSSL
切换 SSL.com
切换 Google Public CA
如果已有 ZeroSSL 帐号,可以在后台控制面板拿到 API Key,然后执行如下命令
终端会输出如下内容
然后手工添加帐号
Google Public CA 需要按照官方博客申请内测,然后获取 Key。
几个 CA 的简单对比
功能 | LE | Buypass | ZeroSSL | Google Public CA | |
有效期 | 90 天 | 180 天 | 90 天 | 90 天 | 90 天 |
多域名 | 支持 | 支持,最多 5 个 | 支持 | 收费支持 | 支持 |
泛域名 | 支持 | 不支持 | 支持 | 收费支持 | 支持 |
Rate Limit | 有 | 有 | 收费无 | 未知 | 有 |
GUI 管理 | 否 | 否 | 有 | 有 | 无 |
ECC 证书链 | 否 | 否 | 有 | 未知 | 无 |
客户支持 | 社区 | 收费 | 收费 | 收费 | 收费 |
简单来说,如果没有特殊需求,可以选择 Let's Encrypt,如果服务器在国内,可以选择 ZeroSSL 或 Buypass,如果愿意付费得到更好的服务和保障,可以选择 ZeroSSL 和 SSL.com,如果面向欧盟用户,可以选择 Buypass 和 ZeroSSL。
注意:经过测试 Google Public CA 的 ACME 验证域名在国内是无法访问的,只有国外服务器才可以申请,申请完成后的证书并无影响。
使用 HTTP 验证签发证书
首先我们要做一下准备工作,假设你域名是
example.com,解析到你的服务器让其生效后,我们建立一个目录:我们的目的是绑定
http://example.com/.well-known/acme-challenge 到这个目录。如果您用的 Nginx,那么新建一个配置文件:
如果您使用的 Apache,那么新建一个配置文件:
我们以 Let's Encrypt 为例,直接在终端运行
如果希望签发 ECC 证书,则运行
如果需要多个域名,则运行
然后就等他执行完,直到出现
Cert success 的提示
然后我们可以安装证书
Nginx
对应的 Nginx 配置指定证书文件
Apache
对应的 Apache 配置指定证书文件
如果是 ECC 证书,则安装的时候需要带上
--ecc 参数,比如注意如果是多个域名,也仅需要在
-d 参数后面指定第一个域名即可。使用 DNS 验证签发证书
有时候因为不想暴露一些二级域名,或者希望在多台机器上部署同一个域名的证书,这时候就需要用到 DNS 插件了,acme.sh 支持几十种 DNS 插件。
这里以 Cloudflare 为例,登录 Cloudflare Dash 后在 API Token 菜单里添加一个 API Token:

然后选择 Edit Zone DNS 的模板

选择你要编辑的域名,也可以加入你服务器的 IP 作为白名单

完成后会给你一串字符,把他复制下来,需要填入下方的
CF_Token 参数
然后进入域名的管理页面,在右侧 API 列找到
Account ID 和 Zone ID 并复制
接着在终端运行
然后开启 acme.sh 的 DNS API 模式申请证书
安装证书方法同上,另外吐槽下,很多教程会让你用 Cloudflare 的全局 Global API Key,真的是,风险太大了,最后怎么被黑的都不知道 = =