编辑
2025-01-06
编程
00

目录

1. 操作
2. 原理

最近有点烦,https 的证书到期了,发现免费一次只能续 3 个月,有点麻烦。刚好难道周末有空,开下电脑就搞一下自动获取证书。

1. 操作

操作环境为 centos7, 腾讯云服务器

申请域名为 hjl18.com (包含所有二级域名)

  1. 下载 cerbot

yum update -y

yum install certbot -y

  1. 申请 RSA 通配符证书命令

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
    • 这个参数指定了 ACME(Automated Certificate Management Environment)服务器的地址。ACME 是一种协议,用于自动化证书的颁发、更新和撤销。Let's Encrypt 使用 ACME 协议来提供证书服务,https://acme - v02.api.letsencrypt.org/directory是 Let's Encrypt 的 ACME v2 服务器的目录端点。Certbot 通过与这个服务器通信来完成证书的申请和管理流程。
  • certonly 这个参数告诉 Certbot 只获取证书,而不进行其他操作
  • --agree-tos 表示用户同意 Let's Encrypt 的服务条款
  • --register-unsafely-without-email 这个参数表示用户不提供电子邮件地址就进行注册
  1. 把上述命令输出的 text 文本添加到 dns 解析里面

dns01.png

dns02.png

  1. 按下 Enter ,这是就会获取证书了 ( /etc/letsencrypt/live/ 目录下)
  2. 在 nginx 上修改证书配置(ssl_certificate, ssl_certificate_key, ssl_trusted_certificate)
nginx
server { 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; } }
  1. 重启一下nginx, 查看网站证书刷新成功

  2. 定时更新证书:

    新增脚本 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

    bash
    0 0 */90 * * /data/nginx-1.17.5/myconf/renew_cert.sh ( :wq! 退出)

到此完成!!

2. 原理

在域名解析中的 txt 规则

  • TXT(Text)记录是域名系统(DNS)中的一种资源记录类型。它主要用于存储文本信息。
  • 从功能角度看,TXT 记录就像是给域名添加了一个 “备注标签”,这个标签可以包含各种文本内容,用于特定的目的。例如,在反垃圾邮件设置中,一些邮件服务提供商可能会要求添加 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 许可协议。转载请注明出处!