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

文章目录

    • 实践场景
    • 了解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跳转到httpslocation / {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.rhkb.cn/news/439290.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GEE学习第三期】GEE常用函数总结

【GEE学习第三期】GEE常用函数总结 数据统计类ee.List.sequence函数 图像处理类ee.Geometry类‌defaultVisualizationVis函数 数据输入输出数值与绘图导出影像 参考 数据统计类 ee.List.sequence函数 用法如下: ee.List.sequence (开始,结…

【Spring】@RequestMapping、@RestController和Postman

文章目录 1.RequestMapping 注解介绍2. RequestMapping 使用3. RequestMapping 是 GET 还是 POST 请求?GET 请求POST 请求指定 GET/POST 方法类型 2. Postman 介绍1. 创建请求2. 传参介绍1. 普通传参2. form-data3. x-www-form-urlencoded form 表单,对应…

PWM 模式

一、介绍 PWM(脉宽调制,Pulse-width modulation)是一种通过调节脉冲信号的宽度来控制电能输出的方法。PWM是一种方波信号,通常在电子和电气工程中用于调节功率输送,控制电机速度,调节LED亮度,以…

【CSS Tricks】css动画详解

目录 引言一、动画关键帧序列二、动画各属性拆解1. animation-name2. animation-duration3. animation-delay3.1 设置delay为正值3.2 设置delay为负值 4. animation-direction5. animation-iteration-count6. animation-fill-mode7. animation-play-state8. animation-timing-f…

MySQL的驱动安装

1、下载并安装MySQL 下载地址: 建议在下列框中选择LTS长期支持版本,下载对应的MSI安装文件。 安装完成后,将MySQL的环境bin路径添加到环境变量中。 可以运行MySQL Configurator进行配置,主要设置密码,并初始化。其余…

网络基础 【HTTP】

💓博主CSDN主页:麻辣韭菜💓   ⏩专栏分类:Linux初窥门径⏪   🚚代码仓库:Linux代码练习🚚 💻操作环境: CentOS 7.6 华为云远程服务器 🌹关注我🫵带你学习更多Linux知识…

JVM Class类文件结构

国庆节快乐 2024年10月2日17:49:22 目录 前言 magic 数 文件版本 使用JClassLib观察class文件 一般信息 接口 常量池 字段 方法 常量池计数器 常量池 类型 CONSTANT_Methodref_info CONSTANT_Class_info 类型结构总表 访问标志 类索引, …

通信协议感悟

本文结合个人所学,简要讲述SPI,I2C,UART通信的特点,限制。 1.同步通信 UART,SPI,I2C三种串行通讯方式,SPI功能引脚为CS,CLK,MOSI,MISO;I2C功能引…

【api连接ChatGPT的最简单方式】

通过api连接ChatGPT的最简单方式 建立client 其中base_url为代理,若连接官网可省略;配置环境变量 from openai import OpenAI client OpenAI(base_url"https://api.chatanywhere.tech/v1" )或给出api和base_url client OpenAI(api_key&…

冯诺依曼体系结构与操作系统简介

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 冯诺依曼体系结构与操作系统简介 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1.…

使用TensorBoard可视化模型

目录 TensorBoard简介 神经网络模型 可视化 轮次-损失曲线 轮次-准确率曲线 轮次-学习率曲线 迭代-评估准确率曲线 迭代-评估损失曲线 TensorBoard简介 TensorBoard是一款出色的交互式的模型可视化工具。安装TensorFlow时,会自动安装TensorBoard。如图: TensorFlow可…

vscode 连接云服务器(ubantu 20.04)

更改服务器系统 如果云服务器上的系统不是ubantu20.04的,可以进行更改: 登录云服务官网(这里以阿里云为例)点击控制台 点击服务器实例 点击更多操作、重置系统 点击重置为其他镜像、系统镜像:选择你要使用的系统镜像…

解决MySQL报Incorrect datetime value错误

目录 一、前言二、问题分析三、解决方法 一、前言 欢迎大家来到权权的博客~欢迎大家对我的博客进行指导,有什么不对的地方,我会及时改进哦~ 博客主页链接点这里–>:权权的博客主页链接 二、问题分析 这个错误通常出现在尝试将一个不…

随笔(四)——代码优化

文章目录 前言1.原本代码2.新增逻辑3.优化逻辑 前言 原逻辑:后端data数据中返回数组,数组中有两个对象,一个是属性指标,一个是应用指标,根据这两个指标展示不同的多选框 1.原本代码 getIndicatorRange(indexReportLi…

企业级版本管理工具(1)----Git

目录 1.Git是什么 2.Git的安装和使用 在Ubuntu下安装命令如下: 使用git --version查看已安装git的版本: 使用git init初始化仓库: 使用tree .git列出目录: 使用git config命令设置姓名和邮箱: 加入--global选项…

【前端】前端数据转化为后端数据

【前端】前端数据转化为后端数据 写在最前面格式化数组代码解释hasOwnProperty是什么? 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限…

【操作系统】引导(Boot)电脑的奇妙开机过程

🌹😊🌹博客主页:【Hello_shuoCSDN博客】 ✨操作系统详见 【操作系统专项】 ✨C语言知识详见:【C语言专项】 目录 什么是操作系统的引导? 操作系统的引导(开机过程) Windows操作系…

渗透测试入门学习——使用python脚本自动识别图片验证码,OCR技术初体验

写在前面 由于验证码在服务端生成后存储在服务器的session中,而标用于标识用户身份的sessionid存在于用户cookie中 所以本次识别验证码时需要用requests.session()创建会话对象,模拟真实的浏览器行为,保持与服务器的会话才能获取登录时服务…

常用排序算法(下)

目录 2.5 冒泡排序 2.6 快速排序 2.6 1 快速排序思路 详细步骤 2.6 2 快速排序递归实现 2.6 3快速排序非递归: 快排非递归的优势 非递归思路 1. 初始化栈 2. 将整个数组的起始和结束索引入栈 3. 循环处理栈中的子数组边界 4. 单趟排序 5. 处理分区后的子…

【论文速看】DL最新进展20241005-Transformer、目标跟踪、Diffusion Transformer

目录 【Transformer】【目标跟踪】【Diffusion Transformer】 【Transformer】 [NeurlPS 2024] Parameter-Inverted Image Pyramid Networks 机构:清华大学、上海AI Lab、上交、港中文、商汤 论文链接:https://arxiv.org/pdf/2406.04330 代码链接&…