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

然后在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"

标签: https, encrypt, acme

已有 2 条评论

  1. Arisu Arisu

    拷贝安装后手动重启nginx访问站点正常。
    但是执行完最后的命令后,访问站点一直提示重定向过多。
    只有把cloudflare中的SSL设置成FULL才可以解决,但是证书的颁发者就成了cloudflare了,而不是Let's Encrypt,请教一下这是为什么,应该如何解决。

    1. Arisu Arisu

      明白了,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.

添加新评论