欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > cerbot 实现通配符子域名证书+续期

cerbot 实现通配符子域名证书+续期

2025/5/6 19:42:56 来源:https://blog.csdn.net/baidu_21349635/article/details/143436397  浏览:    关键词:cerbot 实现通配符子域名证书+续期

文章目录

    • 实现原理
    • 具体操作
      • 1.下载certbot
      • 2.申请RSA通配符证书命令
      • 3.添加txt规则
      • 3. 配置nginx
      • 4.续期
      • 5.自动续期

之前写过一篇docker环境下配置cerbot获取免费ssl证书并自动续期
是单个域名的方式,实现颁发证书和续期的,如果添加子域名还得需要重新操作,那么有没有通配符的方式实现一劳永逸呢
答案: 有
本文来操作下通配符方式证书和续期

参考链接:
通配符证书: https://developer.aliyun.com/article/713724

实现原理

本质上还是通过certbot通过脚本方式向 Let’s Encrypt 机构颁发和更新 SSL/TLS 证书。
单个域名和通配符的区别是: 前者通过 nginx的配置location规则来,通配符需要通过设置dns在域名上添加txt规则来验证

具体操作

实验操作环境为centos7

1.下载certbot

yum update -y
yum install certbot -y

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

certbot -d XXX.com -d *.XXX.com --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory certonly --agree-tos --register-unsafely-without-email
这里可以只写子域名,如果像包括根域名可以使用-d也加上。如果一个-d只需要配置一个txt规则,如果是2个-d配置2个txt规则。
解释

–register-unsafely-without-email : 跳过邮箱验证

3.添加txt规则

上面的命令输出完完后,会有txt记录,
在这里插入图片描述

在阿里云或者自己的域名服务器上配置下。
进入自己域名的DNS记录管理页面,增加两条TXT记录,多数情况下,仅需在域名(Name)处填入_acme-challenge,在内容(Target)处填入上一步Certbot生成的内容即可(记得填写两个,多个文本记录之间以换行符(Enter键)分隔),不同DNS提供商处可能会略有不同,根据实际情况修改:
在这里插入图片描述
在这里插入图片描述

当查看TXT记录解析成功后,回到申请证书的 Press Enter to Continue 处,直接回车。成功会有下面的提示:
在这里插入图片描述
配置文件下在/etc/letsencrypt/live/xxx.com/里面:
在这里插入图片描述
在这里插入图片描述
说明证书已颁发成功。

3. 配置nginx

下面是一个nginx应用该证书的一个例子

server {server_name xxx.com;listen 443 http2 ssl;ssl on;ssl_certificate /etc/cert/xxx.com/fullchain.pem;ssl_certificate_key /etc/cert/xxx.com/privkey.pem;ssl_trusted_certificate  /etc/cert/xxx.com/chain.pem;location / {proxy_pass http://127.0.0.1:8080;}
}

因为我的nginx是用docker部署的,这里略有不同,需要使用容器卷,地址写nginx容器内的路径。
我这里随便找个子域名测试下:

#a
server {listen       80;listen [::]:80;server_name  a.xxx.com www.a.xxx.com;server_tokens off;gzip on;gzip_static on;gzip_buffers 4 16k;gzip_comp_level 5;gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;location / {return 301 https://a.xxx.com$request_uri;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
}# 处理https请求
server {listen 443 ssl;server_name  a.xxx.com;server_tokens off;# /etc/letsencrypt/live/xxx.com/fullchain.pem; 路径根据自己的实际情况填写ssl_certificate /etc/nginx/ssl/child-xxx/fullchain.pem;ssl_certificate_key /etc/nginx/ssl/child-xxx/privkey.pem;ssl_trusted_certificate  /etc/nginx/ssl/child-xxx/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;# root /usr/share/nginx/html;# index index.html;location / {proxy_pass http://x.x.x.x:18080/;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

4.续期

命令如下: certbot renew
证书3个月有效期,在过期时执行就可以了。
在这里插入图片描述
因为没有过期,所以显示不能renew。

5.自动续期

编写个renew_cert.sh脚本


#!/bin/bashcertbot renew

90天一次

0 0 */90 * * /root/cert-scripts/child-xxx/renew_cert.sh


正常这样就可以了,我的renew_cert.sh还需要添加文件拷贝到nginx容器的操作,就不展示了。


文章难免有错误之处,如有,欢迎交流和指正。
下面是我的公众号,以后文章会同步更新,有需要的可以订阅。谢谢。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词