当前位置: 首页 > article >正文

Certbot自动申请并续期https证书

Certbot自动申请并续期https证书

一、

  1. 安装 Certbot:使用命令安装 Certbot:

    dnf install certbot python3-certbot-nginx
    
  2. 获取 SSL 证书:运行 Certbot 命令来获取并安装 SSL 证书。
    示例命令,替换其中的域名和路径信息:

    如果使用源码安装,并且没有加入环境变量需要做软连接
    ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
    ln -s /usr/local/nginx/conf/ /etc/nginx
    
    #只生成证书
    certbot certonly --nginx -w /data/web -d zhongta.ponytest.com --register-unsafely-without-email
    #生成证书把那个改配置
    certbot --nginx -w /data/web -d zhongta.ponytest.com --register-unsafely-without-email
    
    #或者也可以直接指定nginx的目录,根据python版本不一样安装
    yum install certbot python-certbot-nginx
    或者
    dnf install certbot python3-certbot-nginx
    
    certbot --nginx --nginx-server-root /usr/local/nginx1.24/conf --nginx-ctl /usr/local/nginx1.24/sbin/nginx --domain cloud.ponytest.com --register-unsafely-without-email
    

    这将使用 Certbot 的 webroot 插件来进行验证,并为你的域名生成 SSL 证书。确保将 -w /path/to/your/website 替换为你网站的根目录路径,your-domain.com 替换为你的实际域名。

  3. 设置自动续期:Certbot 支持设置自动续期任务,以确保你的 SSL 证书在到期前得到更新。你可以使用系统的计划任务工具(如 cron)来定期运行 Certbot 命令。
    示例:
    cron 任务配置,每天凌晨 2 点自动运行 Certbot:

    0 2 * * * certbot renew --quiet
    

    请使用合适的编辑器打开计划任务配置文件(通常是 /etc/crontab),将上述命令添加到文件末尾,并保存文件。Certbot 每天凌晨 2 点自动检查证书是否需要续期,并在需要时更新证书。

二、使用 Certbot 自动申请并续订阿里云 DNS 免费泛域名证书

Certbot 支持自动申请 LetsEncrypt 的泛域名证书,但是官方插件不支持阿里云,在 GitHub 搜索发现已经有人写好了阿里云 DNS 插件,下面只需要进行简单的配置即可免费申请一个泛域名证书并自动续订。

一)、安装cerbot

yum install epel-release -y
yum install certbot -y

二)、申请证书

域名分为主域名 test.com 和泛域名 *.test.com。

理论上泛域名证书可以同时用在主域名和泛域名上面,不知道为什么我的主域名用了泛域名的证书,chrome 提示我的证书无效。 于是我分开申请了两个证书,有知道解法的同学告知一下。

执行以下命令:

# 泛域名:
certbot certonly -d *.test.com --manual --preferred-challenges dns

# 主域名:
certbot certonly -d test.com --manual --preferred-challenges dns

这时会出现下图的界面

image.png

你需要按照提示,在你的域名服务商处,添加对应的 DNS TXT 解析记录。

配置好之后,按回车继续。

如果成功的话,它会生成两个文件:

  • /etc/letsencrypt/live/test.com/fullchain.pem
  • /etc/letsencrypt/live/test.com/privkey.pem

三)、nginx 配置

接下来配置 nginx 配置,我主要使用 nginx 代理我的前端项目,nginx 请自行安装。

我的 nginx 默认配置文件在 /etc/nginx/nginx.conf。当子域名很多的时候,这个文件就会很庞大,所以我把所有域名的配置都拆分到一个/etc/nginx/conf.d 文件夹。

www.test.com 为例,在/etc/nginx/conf.d 文件夹下新建一个 www.test.com.conf 文件,内容如下:

server {
    listen 443 ssl;
    # 子域名
    server_name  www.test.com;
    # 这里是你证书的位置
    ssl_certificate /etc/letsencrypt/live/test.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/test.com/privkey.pem;
    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;

    location / {
      # 指向前端资源的路径
      root   /home/webapps/test-app/dist;
      index  index.html;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

nginx.conf 配置如下:

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    
    # 这里是防止别人恶意解析
    server {
       listen 80 default_server;
       server_name _;
       access_log off;
       return 404;
    }

    server {
        listen 443  default_server;
        server_name _;
        ssl_certificate /etc/letsencrypt/live/test.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/test.com/privkey.pem;
        access_log off;
        return 404;
    }
    
    # 这里配置强制把 http 转换成 https
    server {
        listen       80;
        server_name  test.com;
        root         /usr/share/nginx/html;
        return 301 https://$host$request_uri;
    }
    server {
        listen       80;
        server_name  *.test.com;
        root         /usr/share/nginx/html;
        return 301 https://$host$request_uri;
    }
    # 这里需要把之前拆分出去的配置引入进来
    include /etc/nginx/conf.d/*.conf;
}

执行nginx -s reload,没问题的话,在浏览器输入域名,已经可以看到 HTTPS 的小锁了。

四)、续期

手动续期:

你只需要在到期前,再手动执行生成证书的命令
certbot certonly -d *.test.com --manual --preferred-challenges dns
再重复一下配置 DNS 解析的操作就 OK 啦。

自动续期:

certbot 提供了一个 hook,让我们可以编写一个 Shell 脚本。在续期的时候让脚本调用 DNS 服务商的 API 接口动态添加 TXT 记录,验证完成后再删除此记录。

安装和使用指南可看 README。

  1. 安装 aliyun cli 工具

    wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
    tar xzvf aliyun-cli-linux-latest-amd64.tgz
    sudo cp aliyun /usr/local/bin
    rm aliyun
    

    安装完成后需要配置凭证信息

  2. 安装 certbot-dns-aliyun 插件

    wget https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh
    sudo cp alidns.sh /usr/local/bin
    sudo chmod +x /usr/local/bin/alidns.sh
    sudo ln -s /usr/local/bin/alidns.sh /usr/local/bin/alidns
    rm alidns.sh
    

    申请证书

    测试是否能正确申请:

    certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run
    

    正式申请时去掉 --dry-run 参数:

    certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean"
    

    证书续期

    certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run
    

    如果以上命令没有错误,把 --dry-run 参数去掉。

  3. 自动续期

    添加定时任务 crontab。

    crontab -e
    

    输入

    1 1 */1 * * root certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload"
    

    上面脚本中的 --deploy-hook "nginx -s reload" 表示在续期成功后自动重启 nginx。

生成也可以用:

# 泛域名
certbot certonly -d *.test.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean"

续费命令:

# 续费命令
certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean"

然后再利用 crontab 定时任务,每天执行一下自动续期。

1 1 */1 * * root certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload"

h-hook “alidns” --manual-cleanup-hook “alidns clean”


然后再利用 crontab 定时任务,每天执行一下自动续期。

```bash
1 1 */1 * * root certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload"

http://www.kler.cn/a/324491.html

相关文章:

  • 微信小程序设置屏幕安全距离
  • GitLab 降级安装出现 500 错误,如何解决?
  • vue2和vue3:diff算法的区别?
  • 物理hack
  • dpdk tm eth event驱动协同完成收发包流程
  • python的matplotlib实现数据分析绘图
  • 01_OpenCV图片读取与展示
  • numpy数组与矩阵运算
  • 自动化运维的利器:Ansible、Puppet和Chef详解
  • OpenAPI鉴权(二)jwt鉴权
  • 关于 SQL 的 JOIN 操作
  • 【接口测试】测试试题
  • 工作中使用人工智能的政策和程序的重要性
  • 【YOLO目标检测反光衣数据集】共2388张、已标注txt格式、有训练好的yolov5的模型
  • 服务器感染了.lcrypt勒索病毒,如何确保数据文件完整恢复?
  • 【VUE】vue-router
  • [uni-app]小兔鲜-04推荐+分类+详情
  • CSS 中的overscroll-behavior属性
  • 国产化低功耗低延时广覆盖物联网无线通讯方案_LAKI芯片
  • [数据集][目标检测]辣椒缺陷检测数据集VOC+YOLO格式695张5类别
  • C/C++语言基础--C++面向对象、类、对象概念讲解
  • Qt开发技巧(九)去掉切换按钮,直接传样式文件,字体设置,QImage超强,巧用Qt的全局对象,信号槽断连,低量数据就用sqlite
  • Visual Studio 2022
  • 大功率蓝外光激光模组能使用多长时间?
  • STM32+PWM+DMA驱动WS2812 —— 2024年9月24日
  • 信息安全工程师(23)网络安全体系相关模型