点击查看安装acme.sh

1.申请证书
申请有两种方式

  • http方式
  • dns方式

dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.
acme.sh 目前支持 ali, cloudflare, dnspod, cloudxns, godaddy 以及 aws 等数十种解析商的自动集成.
点击DNS提供商申请密钥

这里主讲dns申请证书

1.1申请前准备好DNS提供商密钥
这里以ali为例

SAVED_Ali_Key='9dvkgJmgCx0wcsxLhgPv8'
SAVED_Ali_Secret='Qx6gVkxgvxvnaqyyhh0x5rMfDEv74tZstrvi'

申请好保存到~/.acme.sh/account.conf中

1.2 申请证书

acme.sh --issue --dns dns_ali -d qujiazhen.com -d *.qujiazhen.com

1.3 部署证书到nginx

acme.sh --install-cert -d qujiazhen.com \
--key-file /usr/local/nginx/conf/ssl/qujiazhen.com.key \
--fullchain-file /usr/local/nginx/conf/ssl/qujiazhen.com.crt \
--reloadcmd "service nginx force-reload"
  • 注意:__这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload

2.续签证书

acme.sh --renew  --dns dns_ali -d qujiazhen.com -d *.qujiazhen.com \
--key-file /usr/local/nginx/conf/ssl/qujiazhen.com.key \
--fullchain-file /usr/local/nginx/conf/ssl/qujiazhen.com.crt \
--reloadcmd "service nginx force-reload"

加入--force 强制更新

acme.sh --renew  --dns dns_ali -d qujiazhen.com -d *.qujiazhen.com \
--key-file /usr/local/nginx/conf/ssl/qujiazhen.com.key \
--fullchain-file /usr/local/nginx/conf/ssl/qujiazhen.com.crt \
--reloadcmd "service nginx force-reload"

3.自动更新证书
Let's 的证书有效期为60天

目前手动添加DNS获取证书的方式无法自动更新,但是使用DNS API的方式进行获取证书可以在 60 天以后会自动更新, 你无需任何操作.

强制执行更新任务

acme.sh --cron -f

4.配置nginx
在nginx的配置文件中配置如下:

server {
        listen 80;
        listen 443 ssl http2;
        ssl_certificate /usr/local/nginx/conf/ssl/qujiazhen.com.crt;
        ssl_certificate_key /usr/local/nginx/conf/ssl/qujiazhen.com.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
        ssl_session_timeout 10m;
        ssl_session_cache builtin:1000 shared:SSL:10m;
        ssl_buffer_size 1400;
        add_header Strict-Transport-Security max-age=15768000;
        ssl_stapling on;
        ssl_stapling_verify on;
  
        server_name www.example.com;
        location / {
            proxy_pass http://localhost:3000;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }
}

log

使用dns模式获取TXT
`acme.sh --issue -d example.com --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

认证DNS
acme.sh --renew -d '*.example.com' --yes-I-know-dns-manual-mode-enough-go-ahead-please

标签: acme.sh, acme, https, ssl, Let’s Encrypt

添加新评论