老高的域名使用很久了,同时也产生了大量的二级域名,Let's Encrypt虽然每三个月续签的时候不需要加域名参数,但是如果要多加一个或者删除又需要敲一大堆命令,今年(2018)Let's Encrypt强势支持了通配符证书,支持验证的方式是dns,所以需要自己去DNS解析处申请一个API,虽然多了DNS的操作,但是带来的好处真是太多,下面赶紧跟着老高学一下如果使用Acme工具配置Let's Encrypt通配符HTTPS证书吧!
项目链接
Neilpang/acme.sh
项目中文说明
API的使用方法
安装acme.sh
代码语言:javascript复制curl https://get.acme.sh | sh
代码语言:javascript复制因为工具需要crond进行证书的自动更新,如果提示没有安装计划任务工具cron,centos下可以执行下面的命令后重新安装即可!
yum install -y cronie
systemctl enable crond
systemctl start crond
申请证书
老高申请的是通配符证书,可以支持所有二级域名,所以需要DNS认证,此处老高使用的Cloudflare的API KEY,程序就会自动帮我更新证书,当然考虑到安全你也可以手动操作,把命令最后的dns_cf移除即可。
代码语言:javascript复制export CF_Key="你的 cloudflare KEY!!"
export CF_Email="endoffight@gmail.com"
acme.sh --issue -d cao6.app -d *.cao6.app --dns dns_cf
程序会在成功设置txt解析后等120s检测生效情况
安装证书
首先创建一个空文件夹,假设为/etc/nginx/acme.sh/cao6.app
将生成的证书拷贝到指定位置,用的是下面的命令
代码语言:javascript复制acme.sh --install-cert -d cao6.app
--cert-file /etc/nginx/acme.sh/cao6.app/cert.pem
--key-file /etc/nginx/acme.sh/cao6.app/key.pem
--fullchain-file /etc/nginx/acme.sh/cao6.app/fullchain.pem
--reloadcmd "sesystemctl restart nginx" 加上这句话如果你是用nginx
然后在vhost.conf中添加下面的配置,几乎就要大功告成!!
代码语言:javascript复制server{
listen 443 ssl http2;
server_name cao6.app;
location / {
add_header Content-Type "text/plain;charset=utf-8";
return 200 "Your IP Address:$remote_addr";
}
ssl on;
ssl_certificate /etc/nginx/acme.sh/cao6.app/fullchain.pem;
ssl_certificate_key /etc/nginx/acme.sh/cao6.app/key.pem;
ssl_trusted_certificate /etc/nginx/acme.sh/cao6.app/cert.pem;
}
赶紧测试一下配置!
代码语言:javascript复制nginx -t
# 返回
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Good Job! 看来一切都没有问题,acme.sh已经把copy和重启服务器的步骤自动化了,我们现在执行一次下面的命令,以后就不管操心证书的更新了。
代码语言:javascript复制acme.sh --install-cert -d cao6.app
--cert-file /etc/nginx/acme.sh/cao6.app/cert.pem
--key-file /etc/nginx/acme.sh/cao6.app/key.pem
--fullchain-file /etc/nginx/acme.sh/cao6.app/fullchain.pem
--reloadcmd "systemctl force-reload nginx.service"