目前市场上免费证书很多,但大多都是单域名证书,如果存在多个子域名时,就比较麻烦了。
Let's Encrypt免费证书支持通配符证书,但是有效期只有三个月,到期需要续订,也是比较麻烦的,然后发现了一个好东西:acme.sh,可以轻松实现申请及自动续订!
acme.sh是通过域名DNS服务器商提供的API完成自动解析验证的,支持的DNS大部分是国外的,国内我们就以阿里为例,所以域名DNS可以先改成阿里的。
您可以安装acme.sh后在dnsapi目录查看支持的DNS列表,厉害的话自己写一个可以是可以的。
关于acme.sh
ACME全称The Automatic Certificate Management Environment,而acme.sh这个库,则能够在Linux上实现如下功能:
- 自动向Let's Encrypt申请证书;
- 自动调用各大云平台的api接口实现TXT解析配置;
- 证书下发后自动部署到nginx;
- 利用定时器,每60天自动更新证书,并完成自动部署。
安装acme.sh
系统环境:CentOS Linux release 7.4 (Core)
curl https://get.acme.sh | sh
这个自动安装过程完成了以下几个步骤:
- 拷贝sh脚本到~/.acme.sh/
- 创建alias别名acme.sh=~/.acme.sh/acme.sh
- 启动定时器
配置阿里云解析
运行如下命令,配置阿里云api接口的key和secret,其中的值需要到阿里云控制台中去寻找。
export Ali_Key="dsfasdfsdafdcxf"
export Ali_Secret="fasdfdsafwefdsfasdfsdafsdafsdf"
这两个配置将永久保存在文件~/.acme.sh/account.conf中
为域名申请证书
运行如下命令,一键申请证书。
~/.acme.sh/acme.sh --issue --dns dns_ali -d *.oyjz.cn
证书申请成功后,保存在~/.acme.sh/*.oyjz.cn目录下
将证书部署到nginx
~/.acme.sh/acme.sh --install-cert -d *.oyjz.cn \
--key-file /data/app/nginx/conf/nginx/key.key \
--fullchain-file /data/app/nginx/conf/cert.pem \
--reloadcmd "systemctl reload nginx.service"
该命令中的参数将自动保存在~/.acme.sh/www.example.com目录下的www.example.com.conf文件里,定时器更新证书的时候实现自动部署。
配置nginx
略