最近有点烦,https 的证书到期了,发现免费一次只能续 3 个月,有点麻烦。刚好难道周末有空,开下电脑就搞一下自动获取证书。
操作环境为 centos7, 腾讯云服务器
申请域名为 hjl18.com (包含所有二级域名)
yum update -y
yum install certbot -y
certbot -d hjl18.com -d *.hjl18.com --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory certonly --agree-tos --register-unsafely-without-email
bash------------------------------------------------------------------------- Please deploy a DNS TXT record under the name _acme-challenge.co1dawn.com whith the following value: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Before continuing, verify the record is deployed. ------------------------------------------------------------------------- Press Enter to Continue -------------------------------------------------------------------------
-d
参数用于指定域名(Domain)。hjl18.com
是主域名。*.hjl18.com
是通配符域名,表示所有以hjl18.com
为后缀的子域名,例如subdomain.hjl18.com
等都包含在内。这意味着该命令将为指定的主域名及其所有子域名(符合通配符规则的)申请证书。--manual
这个参数表示使用手动模式来完成域名验证。需要用户手动配置 DNS 记录--preferred-challenges dns-01
--preferred - challenges
参数用于指定首选的验证挑战方式dns - 01
是一种验证方式。在这种验证方式中,用户需要通过修改 DNS 记录来证明对域名的所有权。Let's Encrypt 会检查 DNS 记录中的特定 TXT 记录来验证域名。这种方式对于一些无法通过 HTTP 验证(例如没有运行 Web 服务器或者 Web 服务器配置复杂)的情况非常有用--server https://acme - v02.api.letsencrypt.org/directory
https://acme - v02.api.letsencrypt.org/directory
是 Let's Encrypt 的 ACME v2 服务器的目录端点。Certbot 通过与这个服务器通信来完成证书的申请和管理流程。certonly
这个参数告诉 Certbot 只获取证书,而不进行其他操作--agree-tos
表示用户同意 Let's Encrypt 的服务条款--register-unsafely-without-email
这个参数表示用户不提供电子邮件地址就进行注册nginxserver { listen 443 ssl; server_name test.hjl18.com; ssl_certificate /etc/letsencrypt/live/hjl18.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/hjl18.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/hjl18.com/chain.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; access_log /data/logs/main_access_test.log; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Range $http_range; proxy_set_header If-Range $http_if_range; proxy_redirect off; proxy_pass http://0.0.0.0:5700; client_max_body_size 20000m; } }
重启一下nginx, 查看网站证书刷新成功
定时更新证书:
新增脚本 renew_cert.sh
bash#!/bin/bash
cerbot renew
/usr/local/nginx/sbin/nginx -s reload -c /data/nginx-1.17.5/myconf/nginx.conf
授权
chmod 777 renew_cert.sh
设置定时器
crontab -e
bash0 0 */90 * * /data/nginx-1.17.5/myconf/renew_cert.sh ( :wq! 退出)
到此完成!!
在域名解析中的 txt 规则
时序图:
sequenceDiagram
participant User as 用户
participant Certbot as Certbot工具
participant Let'sEncrypt as Let's Encrypt服务器
participant DNS_Server as DNS服务器
User->>Certbot: 执行证书申请命令(含DNS-01挑战)
Certbot->>Let'sEncrypt: 发起证书申请请求,请求DNS-01验证
Let'sEncrypt->>Certbot: 返回用于验证的TXT记录令牌
Certbot->>User: 提示用户将令牌添加到域名DNS的TXT记录
User->>DNS_Server: 在域名管理处添加TXT记录(含令牌)
DNS_Server->>Let'sEncrypt: 完成记录更新并等待查询
Let'sEncrypt->>DNS_Server: 查询域名的TXT记录
DNS_Server->>Let'sEncrypt: 返回包含令牌的TXT记录内容
Let'sEncrypt->>Certbot: 根据验证结果告知是否验证通过
Certbot->>User: 反馈证书申请最终结果(成功/失败)
本文作者:Yui_HTT
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!