之前的文章 使用acme.sh签发证书 介绍了强大的证书自动管理工具 acme.sh 的用法。但是如果服务器在国内,则一些用法需要改变。

首先是安装的源变了,需要从 gitee 安装,否则 github 上的资源无法顺利拉下来:

git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m 你的邮箱 # 使用example.com结尾的邮箱可能会的导致签发时出错

安装好后,可执行文件还是在 ~/.acme.sh 目录下。

既然是在国内服务器上签发证书,正常来说下相应的资源也是在国内。我这里的域名托管在 阿里云,为了使用通配符证书需要用到DNS认证,需要获取阿里云API的access key。

登录 阿里云 后,鼠标移到右上角的头像,选择“AccessKey管理”,然后在新页面的弹框中选择“开始使用子账户AccessKey”,然后在新页面中选择“创建用户”,登录名称可以写”acme”等,勾选“Open API调用访问”。

阿里云AccessKey管理
阿里云AccessKey管理
阿里云AccessKey安全提示
阿里云AccessKey安全提示
阿里云创建子账户用户
阿里云创建子账户用户

创建用户后,复制AccessKey ID和AccessKey Secret(记得复制保存好,页面关闭后AccessKey Secret无法再次获取!),将其写入到 ~/.bashrc 文件中:

export Ali_Key="xxx"
export Ali_Secret="xxx"
source ~/.bashrc

接着授予用户权限,在权限列表中输入dns,勾选“管理HTTPDNS的权限” 和 “管理云解析(DNS)的权限”:

阿里云授予子账户权限
阿里云授予子账户权限

接下来就可以使用 acme.sh 签发证书了:

~/.acme.sh/acme.sh --issue --dns dns_ali -d '*.你的域名'
~/.acme.sh/acme.sh --install-cert -d '*.你的域名' \
--key-file /etc/nginx/ssl/域名.key --fullchain-file /etc/nginx/ssl/域名.pem \
--reloadcmd "service nginx force-reload"

参考

1. Install acme.sh in China

2. 阿里云域名使用ACME自动申请免费的通配符https域名证书