首先下载 certbot-auto 脚本:

1wget https://dl.eff.org/certbot-auto
2chmod a+x certbot-auto

然后使用 pip 安装 aliyun-python-sdk-alidns,同时新建如下脚本,并将 access_key_id 和 access_key_secret 换掉:

 1import os
 2from aliyunsdkcore.client import AcsClient
 3from aliyunsdkalidns.request.v20150109 import AddDomainRecordRequest
 4
 5access_key_id =  'access_key_id'
 6access_key_secret =  'access_key_secret'
 7
 8domain = os.environ["CERTBOT_DOMAIN"]
 9value = os.environ["CERTBOT_VALIDATION"]
10
11print("--------------->domain="  + domain)
12print("--------------->value="  + value)
13
14client = AcsClient(access_key_id, access_key_secret)
15request = AddDomainRecordRequest.AddDomainRecordRequest()
16request.set_DomainName(domain)
17request.set_RR('_acme-challenge')
18request.set_Type('TXT')
19request.set_Value(value)
20response = client.do_action_with_exception(request)
21
22print(response)

执行下面的脚本创建证书:

1./certbot-auto certonly -d huwenqiang.cn -d *.huwenqiang.cn --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory --manual-auth-hook ./dns.py

执行下面的命令就可以自动续期:

1./certbot-auto renew --manual --preferred-challenges dns  --manual-auth-hook ./dns.py

可以使用 crontab 新建定时任务实现自动刷新并重启 nginx 服务器:

10 0 15 */3 * /certbot/certbot-auto renew && /usr/sbin/nginx -s reload

附:nginx 配置文件

 1server {
 2    listen       443 ssl http2;
 3    server_name  www.huwenqiang.cn;
 4    ssl_certificate /etc/letsencrypt/live/huwenqiang.cn/fullchain.pem;
 5    ssl_certificate_key /etc/letsencrypt/live/huwenqiang.cn/privkey.pem;
 6    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 7    ssl_ciphers HIGH:!aNULL:!MD5:!EXPORT56:!EXP;
 8    ssl_prefer_server_ciphers on;
 9
10    gzip on;
11    gzip_min_length 1k;
12    gzip_buffers 4 16k;
13    gzip_comp_level 2;
14    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
15    gzip_vary off;
16    gzip_disable "MSIE [1-6]\.";
17
18    location / {
19        proxy_pass http://solo:8080;
20    }
21
22    error_page   500 502 503 504  /50x.html;
23    location = /50x.html {
24        root   /usr/share/nginx/html;
25    }
26}
27
28server {
29    listen 80;
30    server_name www.huwenqiang.cn;
31    return 301 https://www.huwenqiang.cn$request_uri;
32}