docker环境下配置cerbot获取免费ssl证书并自动续期

news2024/11/15 12:25:32

文章目录

    • 实践场景
    • 了解certbot
    • 查看nginx的映射情况
    • 操作目标
    • 配置nginx配置的ssl证书
      • 设置自动续签

实践场景

本人使用docker部署了一个nginx容器,通过容器卷,实现本地html,ssl,conf和ngiinx容器映射的, 经常需要手动部署免费证书,但是现在的证书免费期3个月太短了。
研究发现: 使用certbot,L可以通过脚本的形式来完成证书的颁发,通过设置定时任务在过期前重新申请和替换,就可以曲线救国的形式来完成ssl证书自动续期,解放双手。

了解certbot

Certbot 是一个免费、开源的软件工具,用于从 Let’s Encrypt 等证书颁发机构获取和自动更新 SSL/TLS 证书。

Certbot 实现颁发证书的原理

生成密钥对和 CSR(证书签名请求):

  • Certbot 首先在服务器上生成一个密钥对,包括私钥和公钥。私钥将被严格保密,存放在服务器上,用于对数据进行加密和解密。公钥则包含在 CSR 中。
  • CSR 是一个包含服务器信息(如域名、组织名称等)的文件,它是向证书颁发机构申请证书的请求。Certbot 会根据服务器的配置和用户提供的信息生成 CSR。
    验证域名所有权:
    证书颁发机构需要确保申请证书的人拥有该域名的所有权。Certbot 会通过多种方式来验证域名所有权,常见的方法有:
  • HTTP 验证:Certbot 在服务器上放置一个特定的文件,证书颁发机构会通过访问该文件来验证服务器是否对该域名有控制权。
  • DNS 验证:在域名的 DNS 记录中添加特定的 TXT 记录,证书颁发机构通过查询 DNS 记录来验证所有权。

提交 CSR 并获取证书:
一旦域名所有权验证通过,Certbot 会将 CSR 提交给证书颁发机构,如 Let’s Encrypt。
证书颁发机构会对 CSR 进行审核,如果一切符合要求,就会颁发一个数字证书。这个证书包含了服务器的公钥、域名信息、颁发机构的数字签名等。

安装证书:
Certbot 将获取到的证书安装到服务器上的适当位置,通常是与服务器软件(如 Nginx、Apache 等)相关的配置文件目录中。
服务器软件在启动时会读取证书文件,并使用其中的公钥来建立安全的 HTTPS 连接。

自动更新:
Certbot 可以设置为定期自动更新证书,以确保证书在有效期内始终有效。通常,Let’s Encrypt 颁发的证书有效期为 90 天,Certbot 会在证书即将过期之前自动执行更新流程,无需人工干预。

查看nginx的映射情况

确认已经对外映射了容器卷(生成的证书要放在本地目录,便于映射给nginx容器)

docker inspect nginx
在这里插入图片描述

确认开放了80和443端口
在这里插入图片描述

操作目标

在这里插入图片描述
先不着急执行此命令,需要先去nginx的域名下面配置验证文件:
在nginx.conf下配置

在这里插入图片描述
对应关系如下:
宿主机和nginx容器对应文件目录

文件名称文件拥有者
/my/nginx/html宿主机目录位置
/usr/share/nginx/htmlnginx容器

宿主机和certbot容器对应文件目录

文件名称文件拥有者
/my/nginx/html/certbot宿主机目录位置
/data/letsencryptcerbot

执行上面的命令后, 验证文件会放在cerbot 容器的 /data/letsencrypt /.well-known/acme-challenge/,对应着 宿主机的 /my/nginx/html/certbot/.well-known/acme-challenge/ ,也就是对应nginx容器对应的 /usr/share/nginx/html/certbot/.well-known/acme-challenge/
。 通过这对应关系,后面才能执行成功。

  # 处理特定后缀的请求
 location  ~/.well-known/acme-challenge/ {
       root /usr/share/nginx/html/certbot;           
}

执行命令:

 docker run -it --rm --name certbot \
            -v /my/nginx/ssl/wiseinsightai/certbot/etc/letsencrypt:/etc/letsencrypt \
            -v /my/nginx/ssl/wiseinsightai/certbot/var/lib/letsencrpt:/var/lib/letsencrypt \
            -v /my/nginx/ssl/wiseinsightai/certbot/var/log/letsencrpt:/var/log/letsencrypt \
            -v /my/nginx/html/certbot:/data/letsencrypt \
            certbot/certbot certonly  \
            --webroot  \
            --webroot-path=/data/letsencrypt \
            --agree-tos -d XXX.com

正常情况下,执行成功,会生成证书,在/etc/letsencrypt/live/域名/live下,对应的宿主机目录下:在这里插入图片描述

再根据对nginx容器的容器卷映射,转成nginx的目录:
即: # 对应 /my/nginx/ssl/wiseinsightai/certbot/etc/letsencrypt/live/域名

配置nginx配置的ssl证书

   server {
        listen 80;
        listen [::]:80;
        server_name www.XXX.com  XXX.com;
        server_tokens off;
       
  
        # 处理特定后缀的请求
        location  ~/.well-known/acme-challenge/ {
            root /usr/share/nginx/html/certbot;           
        }

        # http跳转到https
        location / {
            return 301 https://XXX.com$request_uri;
        }

        # location / {
        #     proxy_pass  http://172.22.251.52:3000;
        # }
    }


    # 处理https请求
    server {
        listen 443 ssl;
        server_name  XXX.com www.XXX.com;

        server_tokens off;

        # 对应 /my/nginx/ssl/wiseinsightai/certbot/etc/letsencrypt/live/XXX.com目录
        ssl_certificate /etc/nginx/ssl/wiseinsightai/certbot/etc/letsencrypt/live/XXX.com/fullchain.pem;
        ssl_certificate_key /etc/nginx/ssl/wiseinsightai/certbot/etc/letsencrypt/live/XXX.com/privkey.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 / {
           //  自己的服务或者静态文件html地址
            proxy_pass  http://172.22.251.52:3000;
        }
    }

配置好后,重启nginx容器,ssl证书就正式生效了!!!
在这里插入图片描述

设置自动续签

因为证书3个月就到期,我们可以设置一个定时任务,自动生成即可,cerbot的续签命令是renew关键字,
命令如下:


 docker run -it --rm --name certbot \
            -v /my/nginx/ssl/wiseinsightai/certbot/etc/letsencrypt:/etc/letsencrypt \
            -v /my/nginx/ssl/wiseinsightai/certbot/var/lib/letsencrpt:/var/lib/letsencrypt \
            -v /my/nginx/ssl/wiseinsightai/certbot/var/log/letsencrpt:/var/log/letsencrypt \
            -v /my/nginx/html/certbot:/data/letsencrypt \
            certbot/certbot  renew

将此命令写成放在脚本里面。
在这里插入图片描述
通过crontab -e设置定时执行该脚本:内容如下:
根据自己的需求设置定时时间,我这里设置12小时一次。

# 自动续签证书
0 */12 * * * /root/renew_cert.sh

注意: 只有到期30天内才能执行成功,否则,脚本会提示没过期,不需要续签,直接跳过

在这里插入图片描述


以上便是,使用docker版的cerbot在 已经安装nginx容器的情况下,获取免费ssl证书和设置自动续签的全部内容,
人无完人,如有错误,欢迎提出交流意见或者指正!!!


大功告成!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPS在表格中填写材料时,内容过多导致表格不换页,其余内容无法正常显示 以及 内容过多,导致表格换页——解决方法

一、现象 1,内容过多导致表格不换页,其余内容无法正常显示 2,内容过多,导致表格换页 二、解决方法 在表格内右击,选择表格属性 在菜单栏选择行,勾选允许跨页断行,点击确定即可 1&#xff0…

react+antdMobie实现消息通知页面样式

一、实现效果 二、代码 import React, { useEffect, useState } from react; import style from ./style/index.less; import { CapsuleTabs, Ellipsis, Empty, SearchBar, Tag } from antd-mobile; //消息通知页面 export default function Notification(props) {const [opti…

Kafka学习笔记(三)Kafka分区和副本机制、自定义分区、消费者指定分区

文章目录 前言7 分区和副本机制7.1 生产者分区写入策略7.1.1 轮询分区策略7.1.2 随机分区策略7.1.3 按key分区分配策略7.1.4 自定义分区策略7.1.4.1 实现Partitioner接口7.1.4.2 实现分区逻辑7.1.4.3 配置使用自定义分区器7.1.4.4 分区测试 7.2 消费者分区分配策略7.2.1 RangeA…

【MySQL】常见的SQL优化方式(二)

目录 1、limit 优化 (1)延迟关联(索引覆盖子查询) (2) 已知位置查询 2、group by 优化 (1)使用索引 (2)避免排序 (3)分析查询 …

LeetCode[中等] 739. 每日温度

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 思路 栈 暴力法为遍历列…

毕业论文不会写?教你如何利用AI来帮我完成初稿

AI是个工具,它能帮你提高效率,但可不能完全替代你的工作。所以,你要做的是学会如何利用AI来辅助你的毕业论文写作。 writehelp智能写作辅导:可节约1000小时写作时间帮助快速完成初稿的撰写。 传送门:http://www.write…

Qt Linguist手册-翻译员

翻译人员 Qt Linguist 是为 Qt 应用程序添加翻译的工具。一旦安装了 Qt,就可以像开发主机上的其他应用程序一样启动 Qt Linguist。 Qt Linguist 主窗口包含一个菜单栏和以下视图: 上下文 (F6) 用于从上下文列表中选择要翻译的字符串。字符串 (F7) 用于…

软考中级网络工程师下午题近五年笔记

刷题地址:软考达人—专业的软考刷题题库,软考历年真题,软考模拟考试,软考考前押题。柴丁科技 (ruankaodaren.com) 上面这个网站有的图不清晰,也可以看这个网站策未来网校——在线刷题、智能刷题 (ceweilai.cn) 2019…

[leetcode] 71. 简化路径

文章目录 题目描述解题方法栈java代码复杂度分析 题目描述 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 / 开头),请你将其转化为 更加简洁的规范路径。 在 Unix 风格的文件系统中规则如下&#xff1…

springboot+大数据+基于协同过滤算法的校园食堂订餐系统【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

25:stm32的低功耗模式

低功耗模式 1、PWR电源控制2、低功耗模式 1、PWR电源控制 PWR(Power Control)电源控制。PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能,这里我们只学习低功耗模式的功能,低功耗模式…

【AI】AIOT简介

随着技术的快速发展,人工智能AI和物联网IoT已经成为当今最热门的技术领域。AIOT是人工智能和物联网的结合,使物联网设备更加智能化,能够进行自主决策和学习的技术。 通过物联网产生、收集来自不同维度的、海量的数据存储于云端、边缘端&#…

Netty源码-业务流程之写数据

Netty基本介绍,参考 Netty与网络编程 1、源码分析,EchoServerHandler之Write流程 1.1 write流程入口 通常我们通过ChannelRead收到消息后,需要给一个响应,通过ctx.write()将响应返回客户端。 在自定义handler的channelRead方法…

极限电流型氧传感器的工作原理以及有哪些应用场景?

极限电流型氧传感器的工作原理: 极限电流型氧传感器的工作原理基于稳定ZrO2固体电解质的氧泵作用。在已稳定化ZrO2两侧被覆铂电极,阴极侧用有气体扩散孔的罩接合,形成阴极空腔。在一定的温度下,当ZrO2电极两侧加一定电压时&#…

使用AOP处理参数

说明:在一些时候,我们需要在接口介绍到参数前处理参数,像参数校验、参数转换等,本文介绍如何使用AOP来实现此需求。 场景 需求:有一批开放给第三方调用的接口,之前传递的都是用户表的ID,现在需…

vscode 内网不联网如何导入vscode插件

如果有小伙伴百度到这篇文章,那一定是遇到了在内网开发不能联网的问题,那就往下看看吧。 安装一个新的Visual Studio Code,需要必要的一些插件,但是不能联网,于是自带的扩展程序安装便不能用了。 1、在一台能访问外网…

Kali Linux入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。

作为一名从事渗透测试的人员,不懂Kali Linux的话,就out了。它预装了数百种享誉盛名的渗透工具,使你可以更轻松地测试、破解以及进行与数字取证相关的任何其他工作。 今天给大家分享一套Kali Linux资料合集,包括12份Kali Linux渗透…

数据结构-栈(理解版)

一、栈的定义 相信大家对于栈或多或少有一些了解,可能大多数人会告诉你栈是一种先进后出的数据结构。这其实说了跟没说一样(❁◡❁)!当然(last in,first out)是栈最有特色的性质。 这里可以给大家一些比较好理解的例…

车辆重识别(改进的去噪扩散概率模型)论文阅读2024/9/29

所谓改进的去噪扩散概率模型主要改进在哪些方面: ①对数似然值的改进 通过对噪声的那个方差和T进行调参,来实现改进。 ②学习 这个参数也就是后验概率的方差。通过数据分析,发现在T非常大的情况下对样本质量几乎没有影响,也就是说…

Python库matplotlib之四

Python库matplotlib之四 小部件(widget)RadioButtons构造器APIs应用实列 Slider构造器APIs应用实列 小部件(widget) 小部件(widget)可与任何GUI后端一起工作。所有这些小部件都要求预定义一个Axes实例,并将其作为第一个参数传递。 Matplotlib不会试图布局这些小部件…