老高的域名使用很久了,同时也产生了大量的二级域名,Let’s Encrypt虽然每三个月续签的时候不需要加域名参数,但是如果要多加一个或者删除又需要敲一大堆命令,今年(2018)Let’s Encrypt强势支持了通配符证书,支持验证的方式是dns,所以需要自己去DNS解析处申请一个API,虽然多了DNS的操作,但是带来的好处真是太多,下面赶紧跟着老高学一下如果使用Acme工具配置Let’s Encrypt通配符HTTPS证书吧!

wildcard

项目链接

Neilpang/acme.sh

项目中文说明

API的使用方法

安装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="endoffight@gmail.com"

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"