使用 Certbot 申请和自动续签 Let’s Encrypt 的免费 SSL 证书

一. Let’s Encrypt 介绍

Let’s Encrypt 是当前最常用的免费 HTTPS 证书生成工具之一。该服务由非营利组织提供,致力于为全球范围内的网站提供便捷的自动化证书颁发服务。虽然 Let’s Encrypt 证书的有效期只有90天,但是可以自动续期,这使得 Let’s Encrypt 更加易于使用和部署。

在使用 Let’s Encrypt 生成证书时,可以使用 Certbot 工具来执行此任务。下面是一个示例命令,用于生成证书:

首先确保你有一个合法可用的域名,example.com替换为你的域名

sudo certbot certonly \    --email example@qq.com \--server https://acme-v02.api.letsencrypt.org/directory \--agree-tos \--manual \--preferred-challenges=dns  \-d example.com \-d www.example.com
  • certbot: Certbot 工具名称,certonly: Certbot 工具的插件,用于生成 SSL/TLS 证书。
  • –email example@qq.com: Let’s Encrypt 要求在生成 SSL 证书时提供有效的联系电子邮件地址。
  • –server https://acme-v02.api.letsencrypt.org/directory: Certbot 生成证书的 ACME 服务器。这里使用 Let’s Encrypt v2 API 端点。
  • –agree-tos:同意 Let’s Encrypt 的服务条款。
  • –manual:指定使用手动模式生成证书。这意味着您需要在命令提示符下手动操作来验证您拥有该域名。
  • –preferred-challenges=dns:指定 Certbot 使用 DNS 验证方式进行证书颁发。这表示您需要将一个特定的 TXT 记录添加到 DNS 进行验证。
  • -d ‘example.com’:指定您想要为其生成 SSL 证书的域名。你可以通过添加多个 -d 选项来同时为多个域名生成证书。

请注意,由于 --manual 选项需要手动操作,因此它可能比其他选项耗费更多时间。另外,使用 DNS 验证时需要在 DNS 服务商处添加 TXT 记录以实现验证,这在某些情况下可能会比较困难,也需要等待 DNS 缓存刷新。在选择选项时,请根据您的需求和特定情况来作出最合适的选择。

我们可以把 --manual --preferred-challenges=dns 替换成–preferred-challenges http-01并配置 Nginx 服务器的相应设置,使用 HTTP 验证方式生成证书。

二. 生成证书的详细流程

在 Linux 上使用 Certbot 来获取并自动续期 Let’s Encrypt 的 SSL 证书是一个很好的选择,因为 Certbot 是由 Electronic Frontier Foundation (EFF) 支持的官方客户端。下面是详细的步骤:

1. 安装 Certbot

首先,你需要在你的 Linux 系统上安装 Certbot。安装方法取决于你使用的 Linux 发行版。以下是一些常见的 Linux 发行版的安装指令:

对于 Ubuntu/Debian 系统:

sudo apt updatesudo apt install certbot

对于 CentOS/RHEL 系统:

sudo yum install epel-releasesudo yum install certbot

对于 Fedora 系统:

sudo dnf install certbot

2. 使用以下命令生成证书:

sudo certbot certonly \
--email example@qq.com \
--server https://acme-v02.api.letsencrypt.org/directory \
--agree-tos \
--manual \
--preferred-challenges=dns  \
-d example.com \
-d *.example.com

请将 example@qq.com 替换为您自己的电子邮件地址,并使用您要生成证书的域名把 example.com 和 www.example.com替换成你自己的。

这里输入它并等待几分钟以允许记录传播并进行验证。一旦您添加了DNS记录,该命令将在 /etc/letsencrypt 目录中生成通配符证书。

注意: Certbot将提示您为该域名添加DNS TXT记录。请使用您的DNS提供商或托管服务提供商的管理面板或API添加记录, 你国内买的域名就在公有云厂商控制台域名管理上配置,自己登录界面多找找,我是在注册域名服务商这里添加的DNS TXT记录
在这里插入图片描述

在这里插入图片描述

如果成功的话,它会生成两个文件:
/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pem

3. 手动续期

Certbot 是申请的Let’s Encrypt的免费证书,有效期 3 个月,到期之后我们可以再次续期,达到永久免费的效果。

你只需要在到期前,再手动执行生成证书的命令,也就是以上步骤2,就ok啦。

4. 自动续期

4.1 方法1:使用DNS插件

如果你的 DNS 提供商支持 API 访问,最好的解决方案是使用 Certbot 的 DNS 插件,这些插件可以自动处理 DNS 记录的更改。例如,如果你使用的是 Cloudflare,你可以安装和使用 Certbot 的 Cloudflare 插件:

  1. 安装插件:

    sudo apt-get install python3-certbot-dns-cloudflare
    
  2. 配置 DNS API:
    创建一个 API 令牌并保存到一个安全的配置文件中,比如 cloudflare.ini,并设置适当的权限:
    如果使用全局 API 密钥:

    dns_cloudflare_email = your-email@example.comdns_cloudflare_api_key = your-api-key
    

    如果使用 API 令牌:

    dns_cloudflare_api_token = your-api-token
    
  3. 确保文件权限正确:

    chmod 600 cloudflare.ini
    
  4. 修改续期命令:
    使用 DNS 插件重新获取证书,并设置自动续期:

    certbot renew --dns-cloudflare --dns-cloudflare-credentials /path/to/cloudflare.ini
    

    验证:

4.2 方法2:提供认证钩子脚本

如果你没有使用支持 API 的 DNS 提供商,或者你更愿意继续使用手动模式,你需要创建一个脚本来自动处理 DNS 记录的验证。以下是一个来自cloudflare DNS提供商简单的示例:

  1. 创建认证脚本(例如 auth-hook.sh):
#!/bin/bash
# Cloudflare API 设置
API_TOKEN="your_cloudflare_api_token"
ZONE_ID="your_zone_id"  # Cloudflare Zone ID
DNS_RECORD_NAME="_acme-challenge.$CERTBOT_DOMAIN."
# 创建或更新 DNS TXT 记录
RESPONSE=$(curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records" \-H "Authorization: Bearer $API_TOKEN" \-H "Content-Type: application/json" \--data '{"type":"TXT","name":"'"$DNS_RECORD_NAME"'","content":"'"$CERTBOT_VALIDATION"'","ttl":120}')
# 检查 Cloudflare API 是否成功响应
SUCCESS=$(echo $RESPONSE | jq .success)
if [[ $SUCCESS != "true" ]]; then
echo "Failed to update DNS records."
echo "API Response: $RESPONSE"
exit 1
fi
# 休眠以等待 DNS 更改传播
sleep 30

脚本说明
脚本使用 Cloudflare 的 API 接口创建一个 TXT 记录,用于 Let’s Encrypt 的 DNS-01 验证。
-使用 curl 发送 HTTP POST 请求到 Cloudflare 的 API 端点,以添加 DNS 记录。
-使用 jq 解析 JSON 响应以检查操作是否成功。
-在验证之前等待 30 秒,以确保 DNS 更改已足够传播。

  1. 设置脚本权限
    给脚本文件设置执行权限:

    chmod +x auth-hook.sh
    
  2. 使用脚本续订证书
    在 Certbot 命令中指定这个脚本作为认证钩子:

    certbot certonly --manual --preferred-challenges=dns \--manual-auth-hook /path/to/auth-hook.sh -d "example.com" -d "*.example.com"
    


以上都可以在命令后加上 --dry-run 后缀进行测试,测试完成后删除 --dry-run

4.3 使用crontab 进行调度

我这边nginx用的是docker环境,需要把生成的证书同步到容器内。

  1. 编辑脚本 automatic_certificate_renewal.sh
#!/bin/bash
# 更新证书
# 方法1
/usr/bin/certbot renew --dns-cloudflare --dns-cloudflare-credentials /opt/cmd/cloudflare/cloudflare.ini
# 方法2
# /usr/bin/certbot certonly --manual --preferred-challenges=dns --manual-auth-hook /opt/cmd/cloudflare/auth-hook.sh -d "byteromance.com" -d "*.byteromance.com"
# 覆盖证书文件
cp /etc/letsencrypt/live/byteromance.com/privkey.pem /data/wordpress/wp_nginx/certs
cp /etc/letsencrypt/live/byteromance.com/fullchain.pem /data/wordpress/wp_nginx/certs
docker restart wp_nginx
  1. 设置crontab调度
 0 0 1 * * bash /opt/cmd/automatic_certificate_renewal.sh > /opt/cmd/log/cert/logfile_$(date "+\%Y\%m\%d").log 2>&1

三. 配置HTTPS

在生成证书后,使用以下方法之一来配置您的HTTPS,这里不作详细的介绍。

  1. 对于Apache服务器:

    # 在您的虚拟主机文件中添加以下行:
    SSLEngine on SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem                      
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem 
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
    
  2. 对于NGINX服务器:

    # 在您的虚拟主机文件中添加以下行:
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    

🔥运维干货分享

  • 系统规划与管理师备考经验分享

  • 软考高级系统架构设计师备考学习资料

  • 软考中级数据库系统工程师学习资料

  • 软考高级网络规划设计师备考学习资料

  • Kubernetes CKA认证学习资料分享

  • AI大模型学习资料合集

  • 免费文档翻译工具(支持word、pdf、ppt、excel)

  • PuTTY中文版安装包

  • MobaXterm中文版安装包

  • pinginfoview网络诊断工具中文版

  • Xshell、Xsftp、Xmanager中文版安装包

  • 办公室摸鱼神器,伪装电脑系统更新中

  • Typora简单易用的Markdown编辑器

  • Window进程监控工具,能自动重启进程和卡死检测

  • 毕业设计高质量毕业答辩 PPT 模板分享

  • IT行业工程师面试简历模板分享

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

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

相关文章

【kubernetes】--controller(DaemonSet)

Kubernetes DaemonSet 控制器详解 它确保集群中所有(或部分)节点上都运行一个 Pod 的副本。当有新节点加入集群时,DaemonSet 会自动在新节点上创建 Pod;当节点从集群中移除时,这些 Pod 也会被垃圾回收。 DaemonSet 的核心特性 每个节点一个 P…

内测分发平台应用的异地容灾和负载均衡处理和实现思路

内测分发平台应用的异地容灾和负载均衡处理和实现思路如下:一、异地容灾1.风险评估和需求分析:对现有的IT基础设施进行全面的风险评估和需求分析,评估潜在风险和灾害的可能性,以及确定业务和数据的关键性。2.设计备份架构&#xf…

【Vue】浏览器缓存 sessionStorage、localStorage、Cookie

嘿,各位 Vue 开发者们!今天咱们来好好聊聊浏览器里的三种缓存方式:sessionStorage、localStorage 和 Cookie。在实际开发中,合理运用这些缓存能让我们的应用性能大幅提升,同时避免一些不必要的问题。下面就跟着我的笔记…

c#如何将不同类型的数据存储到一起

在 C# 中,存储不同类型的数据有多种方式,具体选择取决于你的需求(类型安全、性能、灵活性等)。以下是常见的解决方案及其适用场景:1. 使用 object 类型(装箱 / 拆箱)将所有数据转换为基类 objec…

超唯美治愈风卡通插画PPT模版

海洋卡通风治愈系PPT模版,儿童可爱治愈可爱PPT模版,治愈风商务通用PPT模版,治愈系课件PPT模版,治愈风插画PPT模版,超唯美治愈风PPT模版,可爱插画治愈系女孩PPT模版 超唯美治愈风卡通插画PPT模版&#xff1a…

el-tooltip 快速滚动的时候出现残影如何解决 vue3

<el-tooltip:disabled"isScrolling" <!-- 新增滚动状态绑定 -->:popper-options"{ modifiers: [{ name: computeStyles, options: { adaptive: false }] }"effect"dark":content"label.name"placement"right-start"…

【经典面经】C++新特性 TCP完整收发数据 TLS1.2 TLS1.3

文章目录cpp新特性C11C14C17C20tcp如何保证完整收发数据结论1. **面向连接的三次握手**2. **字节序号与确认机制**3. **校验和&#xff08;Checksum&#xff09;**4. **超时重传与快速重传**5. **滑动窗口&#xff08;流量控制&#xff09;**6. **数据重组与排序**7. **四次挥手…

Spring AI 系列之十一 - RAG-进阶RetrievalAugmentationAdvisor

之前做个几个大模型的应用&#xff0c;都是使用Python语言&#xff0c;后来有一个项目使用了Java&#xff0c;并使用了Spring AI框架。随着Spring AI不断地完善&#xff0c;最近它发布了1.0正式版&#xff0c;意味着它已经能很好的作为企业级生产环境的使用。对于Java开发者来说…

[TOOL] ubuntu 使用 ffmpeg 操作 gif、mp4

文章目录一、工具安装二、gif 转mp4三、mp4 两倍速一、工具安装 安装 ffmpeg 工具&#xff1a; sudo apt install ffmpeg二、gif 转mp4 1. 配置环境 核心指令: ffmpeg -i input.mp4 -filter_complex "[0:v]setpts0.5*PTS[v];[0:a]atempo2.0[a]" -map "[v]&q…

linux中INIT_MM_CONTEXT宏对pgd的重复赋值

在GNU C中&#xff0c;支持通过标号元素对指定结构体成员名进行初始化&#xff0c;这允许初始化值以任意顺序出现。在linux内核中对init_mm初始化时有如下代码。#define INIT_MM_CONTEXT(name) \.pgd init_pg_dir,struct mm_struct init_mm {.mm_rb RB_ROOT,.pgd swapper…

第十五章 STL(stack、queue、list、set、map容器使用)

栈stack使用&#xff1a;队列queue双向循环链表listlist构造函数list 赋值和交换list 大小操作list 插入和删除list 数据存取list 反转和排序排序算法sort降序操作排序案例#include<iostream> using namespace std; #include<list>class Person { private:string n…

【论文阅读】HCCF:Hypergraph Contrastive Collaborative Filtering

论文出处&#xff1a;SIGIR 2022 CCF-A 论文地址&#xff1a;Hypergraph Contrastive Collaborative Filtering 论文代码&#xff1a;akaxlh/HCCF: HCCF, SIGIR 2022 目录 摘要 介绍 研究背景与核心问题 现有方法局限性 HCCF的创新解决方案 技术优势 定义与相关工作 …

Retrofit+RxJava:打造声明式REST客户端的艺术 —— 像点咖啡一样调用API

目录一、告别Callback地狱&#xff1a;声明式编程的魅力1.1 传统网络请求的痛点1.2 Retrofit的声明式革命二、Retrofit核心配置工厂2.1 构建Retrofit实例2.2 常用注解速查表三、RxJava响应式魔法3.1 链式调用优雅变身3.2 超能力操作符盘点四、实战演练&#xff1a;构建天气查询…

【离线数仓项目】——任务调度与数据可视化实战

摘要 本文主要围绕离线数仓项目中的任务调度与数据可视化实战展开&#xff0c;介绍了业务流程虚拟节点、离线数仓任务调度、数据可视化等方面的内容&#xff0c;涉及DataWorks和QuickBI等工具的使用&#xff0c;并提供了相关的博文参考和项目实战域信息。 1. 任务调度管理实战…

【视频格式转换】.264格式转为mp4格式

背景 视频格式转换是多媒体处理中的常见需求&#xff0c;尤其在视频编辑、存储或跨平台播放时。H.264&#xff08;即AVC&#xff09;是一种广泛使用的视频编码标准&#xff0c;以其高压缩率和良好兼容性著称&#xff0c;但通常以容器格式&#xff08;如.264裸流文件&#xff0…

JAVA学习笔记 使用notepad++开发JAVA-003

目录 1 前言 2 部署notepad的java开发环境 2.1 下载并安装notepad 2.2 设置新建文件的语言 2.3 安装NppExec插件 2.4 编写JAVA脚本 2.5 设置脚本执行快捷键 2.6 效果测试 3 小结 1 前言 JAVA可以使用记事本来编写代码&#xff0c;但是这种方式效率十分低下。我们可以使…

Vue Router 完全指南:从入门到实战,高效管理前端路由

前言在现代化的前端开发中&#xff0c;路由管理是构建单页应用&#xff08;SPA&#xff09;的核心功能之一。Vue.js 作为主流的前端框架之一&#xff0c;提供了强大的官方路由库Vue Router&#xff0c;帮助开发者高效管理页面跳转、动态加载、权限控制等关键需求。无论是构建企…

Sentinel热点参数限流完整示例实现

Sentinel热点参数限流完整示例实现 1. 添加Maven依赖 (pom.xml) <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.2.7.RELEASE</version> </depend…

正则表达式深度解析:从LeetCode 3136题说起

正则表达式深度解析&#xff1a;从LeetCode 3136题说起 引言 正则表达式&#xff08;Regular Expression&#xff0c;简称RegEx&#xff09;是一种强大的字符串匹配工具&#xff0c;在字符串处理、数据验证、文本搜索等场景中有着广泛的应用。本文将以LeetCode 3136题"有效…

映美打印机-URL页面打印

<?php /** 打印 - 映美云 https://open.jolimark.com/doc/ */ namespace Home\Controller; use Admin\Logic\OrderLogic;class PrintController extends BaseController {private $appid "";private $appkey "";//打印机编号private $deviceIds &qu…