用 acme.sh 签发 Let's Encrypt 证书


这仅仅是个笔记,虽然阿里云腾讯云等云厂商都提供了为期一年的证书,不过长远并不看好

关于 Let’s Encrypt 的介绍自己看官网好了,比较蛋疼是其签发的证书只有 90 天,不过很多人根据 ACME 协议写了可以快速使用的客户端

我用的是 acme.sh,以下备注下常用的操作

安装

curl https://get.acme.sh | sh

签发

使用 acme.sh 有很多种签发证书的方式,考虑到便利,这里使用 DNS API 的方式

拿 CloudFlare 举例,需要先拿到 Global API Key,然后

export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Email="xxxx@sss.com"
acme.sh --issue --dns dns_cf \
-d example.com \
-d www.example.com

之后,每 60 天会自动 renew 一次的

使用

acme.sh --install-cert
--key-file       /path/to/ssl.key  \
--fullchain-file /path/to/ssl.crt \
-d example.com \
-d www.example.com

配合 Nginx

server {
    listen 80;
    listen 443 ssl http2;
    server_name example.com;
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";

    ssl_prefer_server_ciphers on;
    ssl_certificate /path/to/ssl.crt;
    ssl_certificate_key /path/to/ssl.key;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;
    ssl_ciphers 'EECDH+AESGCM:AES256+EECDH';
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    if ($scheme = http) {
        return 301 https://$server_name$request_uri;
    }
}

最后,来一个 A+