使用Acme工具配置Let's Encrypt通配符HTTPS证书
老高的域名使用很久了,同时也产生了大量的二级域名,Let's Encrypt虽然每三个月续签的时候不需要加域名参数,但是如果要多加一个或者删除又需要敲一大堆命令,今年(2018)Let's Encrypt强势支持了通配符证书,支持验证的方式是dns,所以需要自己去DNS解析处申请一个API,虽然多了DNS的操作,但是带来的好处真是太多,下面赶紧跟着老高学一下如果使用Acme工具配置Let's Encrypt通配符HTTPS证书吧!
项目链接
安装acme.sh
curl https://get.acme.sh | sh
因为工具需要crond进行证书的自动更新,如果提示没有安装计划任务工具cron,centos下可以执行下面的命令后重新安装即可!
yum install -y cronie
systemctl enable crond
systemctl start crond
申请证书
老高申请的是通配符证书,可以支持所有二级域名,所以需要DNS认证,此处老高使用的Cloudflare的API KEY,程序就会自动帮我更新证书,当然考虑到安全你也可以手动操作,把命令最后的dns_cf移除即可。
export CF_Key="你的 cloudflare KEY!!"
export CF_Email="[email protected]"
acme.sh --issue -d cao6.app -d *.cao6.app --dns dns_cf
程序会在成功设置txt解析后等120s检测生效情况
安装证书
首先创建一个空文件夹,假设为/etc/nginx/acme.sh/cao6.app
将生成的证书拷贝到指定位置,用的是下面的命令
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中添加下面的配置,几乎就要大功告成!!
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;
}
赶紧测试一下配置!
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和重启服务器的步骤自动化了,我们现在执行一次下面的命令,以后就不管操心证书的更新了。
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"
拷贝安装后手动重启nginx访问站点正常。
但是执行完最后的命令后,访问站点一直提示重定向过多。
只有把cloudflare中的SSL设置成FULL才可以解决,但是证书的颁发者就成了cloudflare了,而不是Let's Encrypt,请教一下这是为什么,应该如何解决。
明白了,cloudflare的off和Flexible 会跳转http,而我在nginx中配置了80跳443,导致重定向过多。
Off: No visitors will be able to view your site over HTTPS; they will be redirected to HTTP.
Flexible SSL: You cannot configure HTTPS support on your origin, even with a certificate that is not valid for your site. Visitors will be able to access your site over HTTPS, but connections to your origin will be made over HTTP. Note: You may encounter a redirect loop with some origin configurations.