杂项
acme.sh 证书管理

安装 acme.sh (opens in a new tab)

# apt install socat # 安装 socat
curl https://get.acme.sh | sh

参考 acme.sh 官方文档,可创建一个 alias,方便使用

alias acme.sh=~/.acme.sh/acme.sh

安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/

申请证书

acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证.

dns 验证

自动 dns 模式

acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成。

  • CloudFlare(Global API Key)

前往我的个人资料 -> API 令牌 -> Global API Key -> 查看

export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" # Cloudflare Global API Key
export CF_Email="yourCloudflare@gmail.com" # Cloudflare 账户邮箱
acme.sh --issue --dns dns_cf -d "example.com" --standalone -k ec-256 --server letsencrypt --log
  • CloudFlare(API Tokens)

前往我的个人资料 -> API 令牌 -> 创建令牌

所需要的权限如下图所示

cloudflare_api

注意:创建的 API Tokens(CF_Token) 只出现一次,如果忘记了,需要重新生成

cloudflare_api_2

接着到随便一个域名内获取 CF_Account_ID 和 CF_Zone_ID (Zone_ID 非必须)

export CF_Token="xxxxxxx"
export CF_Account_ID="aaaaaaa"
# export CF_Zone_ID="bbbbbbbb"
acme.sh --issue --dns dns_cf -d "example.com" --standalone -k ec-256 --server letsencrypt --log

letsencrypt 申请到的证书有效期是 90 天,脚本每 60 天会对证书进行更新,你也可以手动强制更新:

# ecc 证书续期需要在后面加上 --ecc
acme.sh --list # 查询域名申请证书信息
acme.sh --renew -d example.com --force
acme.sh --renew-all --force

手动 dns 模式

手动在域名上添加一条 txt 解析记录, 验证域名所有权。这种方式的好处是, 你不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证. 坏处是,如果不同时配置 Automatic DNS API,使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。

acme.sh --issue --dns -d example.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

http 验证

  • webroot 模式

http 验证方式需要在域名的 web 目录下放置一个验证文件, 来验证你的域名所有权,acme.sh 会自动帮你完成这个过程. 只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.

acme.sh --issue -d example.com -d www.example.com --webroot /home/wwwroot/example.com/
  • nginx/apache 模式

如果你用的 nginx/apache 服务器, 或者反代, acme.sh 还可以智能的从 nginx 的配置中自动完成验证, 你不需要指定网站根目录. 你只需要指定域名, acme.sh 就会自动从 nginx 配置中读取网站根目录, 并自动完成验证.

acme.sh --issue -d example.com --nginx
# apache
# acme.sh --issue -d example.com --apache

注意, 无论是 apache 还是 nginx 模式, acme.sh 在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问 https.

  • standalone 模式

如果你的服务器上没有安装 nginx/apache, 你也可以使用 standalone 模式, standalone 模式会自动启动一个临时的 web 服务器, 来完成验证. 你只需要指定域名, acme.sh 就会自动完成验证.

acme.sh --issue -d example.com --standalone