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

文章目录

之前写过一篇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容器内的路径。

我这里随便找个子域名测试下:

shell 复制代码
#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脚本

shell 复制代码
#!/bin/bash

certbot renew

90天一次

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


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


文章难免有错误之处,如有,欢迎交流和指正。

下面是我的公众号,以后文章会同步更新,有需要的可以订阅。谢谢。

相关推荐
程序员mine9 天前
HTTPS-TLS加密与证书完全指南(中)
网络协议·https·ssl
开发者联盟league9 天前
pnpm install报错ERR_SSL_PACKET_LENGTH_TOO_LONG问题解决
网络·网络协议·ssl
北极熊~~9 天前
win上编译带ssl的paho-cpp库
mqtt·ssl·源码编译mqtt库
GlobalSign数字证书10 天前
SSL证书过期致业务宕机?企业证书管理三大痛点与自动化方案
网络协议·自动化·ssl
GlobalSign数字证书10 天前
Nginx配置SSL证书教程:从零到HTTPS的完整部署指南
nginx·https·ssl
疯狂的维修10 天前
博图不同版本下的OPC UA功能开启区别
服务器·https·ssl
master33610 天前
SSL 证书链问题导致微信小程序无法正常工作
网络协议·微信小程序·ssl
寒山李白11 天前
人工智能训练师报考指南
人工智能·ai·证书·职称·训练师
极创信息11 天前
信创产品适配测试认证,域名和SSL是必须的吗?
java·开发语言·网络·python·网络协议·ruby·ssl
吠品15 天前
一次 Nginx 报错 unexpected end of file 的排查记录
网络协议·https·ssl