快速上手:采用Let‘sEncrypt免费SSL证书配置网站Https (示例环境:Centos7.9+Nginx+Let‘sEncrypt)
1 关于Let’s Encrypt与Cerbot DNS验证
Let’s Encrypt 是一个提供 免费证书 的 认证机构。
Cerbot 是 Let’s Encrypt 提供的一个工具,用于自动化生成、验证和续订证书。
DNS验证是 Cerbot 支持的验证方式之一。相比 HTTP 验证或 TLS-ALPN 验证,DNS 验证更灵活,可以用于获取任意域名(如子域名或裸域名)的证书,无需直接访问服务器。 DNS 验证通过在目标域名的 DNS 记录中添加特定的文本记录(TXT 记录)来证明 对该域名的控制权。认证机构会查询域名的 DNS TXT 记录以验证域名所有权。
以下是 DNS 验证的具体步骤和背后逻辑:
(1) 生成挑战内容
- Cerbot 向 Let’s Encrypt 发送证书申请,提供需要认证的域名。
- Let’s Encrypt 返回一个挑战(Challenge),内容包括一个随机字符串(Challenge Token)。
(2) 计算验证字符串
- Cerbot 结合 Challenge Token 和账户密钥生成一个验证字符串。
- 验证字符串 =
SHA256(account_key + token)或类似算法的结果。
- 验证字符串 =
- 这个字符串需要通过 DNS TXT 记录发布。
(3) 添加 DNS TXT 记录
- Cerbot 会提示用户手动或通过 API 在域名的 DNS 配置中添加一条 TXT 记录:
- 记录名:
_acme-challenge.<your-domain> - 记录值: 验证字符串
- 记录名:
例如,对于域名 example.com:
_acme-challenge.example.com. IN TXT "验证字符串"
(4) 验证记录
- Let’s Encrypt 会查询域名的 DNS 服务器,寻找
_acme-challenge.<your-domain>的 TXT 记录。 - 如果记录值与预期验证字符串匹配,则证明申请者对该域名具有控制权。
(5) 签发证书
- 验证成功后,Let’s Encrypt 会签发证书,Cerbot 会下载并保存证书。
Let’s Encrypt官网
参考教程
2 网站HTTPS配置最佳实践
-
使用Cerbot生成Let’s Encrypt证书、DNS厂家添加TXT记录、继续完成Cerbot的控制权认证
-
Nginx对网站进行Https配置(HTTP的重定向到HTTPS)
-
业务服务的HTTPS配置,这里有两种方式(按需):
- 🤷♂️服务本身支持HTTPS(一般开发后业务服务为http协议接口),如SpringBoot Web项目,可使用java keytool生成密钥配置ssl。若业务服务本身不支持https,不建议调整业务模块,保证业务开发的纯净。
- 👍通过Nginx对接口进行转发,http重定向为https,这种方式是推荐的。
3 具体操作
3.1 服务器安装cerbot工具
cerbot用来管理Let’s Encrypt的证书(申请、续约)。我的服务器操作系统为centos7.9,执行的有效操作如下:
# 安装cerbot工具,cerbot用来管理Let's Encrypt的证书(申请、续约)
sudo yum install certbot
查看certbot版本验证工具安装是否成功:
[root@vm ~]# certbot --version
# 正确输出cerbot工具版本
certbot 1.11.0
3.2 cerbot使用 DNS 验证获取单域名证书
3.2.1 cerbot验证与证书生成(交互式)
- 键入下列命令,为指定域名生成证书(交互式方式进行,用户多次键入信息来完成验证信息的采集与证书的颁发)
sudo certbot certonly --manual --preferred-challenges dns -d demo.cn -d www.demo.cn
- 用户填入信息(邮箱)等用来订阅域名信息服务(如Let’s Encrypt的证书升级、到期通知等)

- 验证服务器与域名归属相关操作
(1)cerbot工具输出dns解析txt值
(2)dns解析后台添加txt的解析记录(两条)

- cerbot工具进行验证,验证通过,输出证书到服务器

3.2.2 Nginx配置
- 修改nginx配置(主要是配置站点重定向、启用ssl、配置证书路径)
nginx配置非常灵活且具有扩展性,其配置目录大致如下:
- /etc/nginx/| - nginx.conf 主配置文件(定义了全局配置、事件模块、HTTP 模块等核心设置)| - ./conf.d/ 配置目录(此目录一般被主配置文件中被include)| - www.demo.cn.conf (自己的站点配置,针对www.demo.cn的https配置就在这里) | - ...# 使用的Nginx版本
[root@vm ~]# nginx -v
nginx version: nginx/1.20.1
www.demo.cn.conf配置文件内容:
server {listen 80;server_name demo.cn www.demo.cn;# Redirect all HTTP requests to HTTPSreturn 301 https://$host$request_uri;
}server {listen 443 ssl http2;server_name demo.cn www.demo.cn;root /usr/share/nginx/html;index index.html index.htm;# SSL Configurationssl_certificate /etc/letsencrypt/live/demo.cn/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/demo.cn/privkey.pem;ssl_session_cache shared:SSL:1m;ssl_session_timeout 10m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;# Additional security headers (optional)add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;# Error pageserror_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}# Default locationlocation / {try_files $uri $uri/ =404;}
}
- 重启nginx刷新配置
# 重启nginx
sudo systemctl restart nginx
# 查看nginx状态
sudo systemctl status nginx
- 清空缓存,查看网站

没错,到此为止网站已经完成了https的配置,有几点说明:
nginx.conf配置未作修改!但需要检查nginx.conf配置中是否include了conf.d配置目录。- 如果之前网站接入的服务为
http,需要对服务进行调整使协议兼容,可以通过使用nginx反向代理服务为https(推荐),或者改造服务自身支持https。
- 通过nginx反向代理API服务为https的配置大致如下
server {listen 443 ssl http2;server_name demo.cn www.demo.cn;...location /your-api/module1 {allow 127.0.0.1; # 本地回环地址allow otherip; # 允许指定的 IP 地址allow ::1; # IPv6 本地地址deny all; # 禁止其他所有来源proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location /your-api/module2 {allow 127.0.0.1; # 本地回环地址allow otherip; # 允许指定的 IP 地址allow ::1; # IPv6 本地地址deny all; # 禁止其他所有来源proxy_pass http://127.0.0.1:8081;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}...}
3.2.3 cerbot证书续费
certbot certonly --renew-by-default -d demo.cn -d www.demo.cn
# 会输出1、2两种验证方式,我采用的是模式2

续费命令说明:
certbot- Certbot 是一个用于申请和管理 Let’s Encrypt SSL 证书的工具。
certonly**- 表示只申请证书,不自动安装或配置 Web 服务器(如 Nginx 或 Apache)。
- 适合手动配置证书的场景。
--renew-by-default- 如果证书已经存在,Certbot 会尝试续费(renew)而不是重新申请。
- 如果证书不存在,Certbot 会申请新证书。
-d demo.cn -d www.demo.cn-d参数用于指定域名。- 这里申请的是
demo.cn和www.demo.cn两个域名的证书。 - 多个
-d参数表示申请一个包含多个域名的证书(SAN 证书)。
两种验证域名所有权:
Spin up a temporary webserver (standalone)- Certbot 会启动一个临时的 Web 服务器来完成 HTTP-01 验证。
- 适用场景:如果你没有运行 Web 服务器(如 Nginx 或 Apache),或者可以暂时停止 Web 服务器。
- 注意事项:需要确保 80 端口未被占用,或者暂时停止 Web 服务器。
Place files in webroot directory (webroot)- Certbot 会将验证文件放置在你的 Web 服务器的根目录(如 /var/www/html),通过 HTTP 访问验证文件。
- 适用场景:如果你正在运行 Web 服务器(如 Nginx 或 Apache),并且不想停止服务。
- 注意事项:需要指定 Web 根目录路径。
相关文章:
快速上手:采用Let‘sEncrypt免费SSL证书配置网站Https (示例环境:Centos7.9+Nginx+Let‘sEncrypt)
1 关于Let’s Encrypt与Cerbot DNS验证 Let’s Encrypt 是一个提供 免费证书 的 认证机构。 Cerbot 是 Let’s Encrypt 提供的一个工具,用于自动化生成、验证和续订证书。 DNS验证是 Cerbot 支持的验证方式之一。相比 HTTP 验证或 TLS-ALPN 验证,DNS …...
shell技能树-扩展变量
扩展变量是指在shell脚本中用于实现条件判断和变量操作的特殊语法。 表格总结: 前三个 存在或者非空时,优先使用待测变量,否则使用默认值(或报错)。 最后一个 存在或者非空时,优先使用默认值,…...
基于RedHat9部署WordPress+WooCommerce架设购物网站
系统版本信息:Red Hat Enterprise Linux release 9.2 (Plow) WordPress版本信息:wordpress-6.6.2-zh_CN WooCommerce版本信息:woocommerce.9.5.1 环境架构:LNMP(RedHat9nginx1.20.1PHP 8.0.27MySQL8.0.30) …...
LabVIEW瞬变电磁接收系统
利用LabVIEW软件与USB4432采集卡开发瞬变电磁接收系统。系统通过改进硬件配置与软件编程,解决了传统仪器在信噪比低和抗干扰能力差的问题,实现了高精度的数据采集和处理,特别适用于地质勘探等领域。 项目背景: 瞬变电磁法是探…...
Docker入门篇[SpringBoot之Docker实战系列] - 第534篇
历史文章(文章累计530) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…...
Linux系统扩容根 (/) 文件系统空间
[rootlocalhost ~]# df -Th / # 查看当前根文件系统使用情况 [rootlocalhost ~]# lsblk # 查看设备的挂载情况 [rootlocalhost ~]# lvdisplay # 查看逻辑卷使用情况 # 操作磁盘分区表 [rootlocalhost ~]# fdisk /dev/nvme0n1 欢迎使用 fdisk (util-linux 2.37.4…...
JavaScript之JQuery
JQuery W3C 标准给我们提供了⼀系列的函数, 让我们可以操作: jQuery是⼀个快速、简洁且功能丰富的JavaScript框架,原⽣的JavaScript提供的API操作DOM元素时, 代码⽐较繁琐, 冗⻓. 我们学习使⽤JQuery来操作⻚⾯对象,如 • ⽹⻚内容 • ⽹⻚结构 …...
JAVA学习记录2
文章为个人学习记录,仅供参考,如有错误请指出。 如何开发第一个JAVA程序? 开发java程序主要分为三个步骤: 1.编写代码 2.编译代码 3.运行代码 1.编写代码 编写java的工具有很多,文本编辑器、Notepad、Visual Stu…...
计算机网络、嵌入式等常见问题简答
1.嵌入式系统中经常要用到无限循环,如何用C编写死循环 答:while(1){}或者for(;;) 2.程序的局部变量存在于哪里,全局变量存在于哪里,动态申请数据存在于哪里。 答:程序的局部变量存在于栈区;全局变量存在…...
中华人民共和国预算法实施条例
(1995年11月2日国务院第37次常务会议通过 1995年11月22日中华人民共和国国务院令第186号发布 自发布之日起施行) 第一章 总则 第一条 根据《中华人民共和国预算法》(以下简称预算法),制定本条例。 第二条 县级以上地方政府的派出机关,根据本级政…...
【养生--果蔬汁】
果蔬汁: 1、甜菜根苹果柠檬菠萝 2、羽衣甘蓝苹果菠萝番石榴 3、番茄蓝莓苹果 4、胡萝卜、番茄、菠菜、西芹、西蓝花、甘蓝、花菜、南瓜、甜椒 5、火龙果香蕉 6、黄瓜香蕉 7、黄瓜雪梨 8、番茄苹果 9、黄瓜生菜 10、柚子雪梨 11、胡萝卜苹果黄瓜 12、黄瓜…...
LLM架构从基础到精通之词向量1
自然语言处理中的词嵌入:从基础到应用 在自然语言处理(NLP)领域,词嵌入是一个极为关键的概念。它本质上是一种将单词转换为连续向量空间中的数值表示(即向量)的方法,旨在捕捉单词的语义信息&am…...
【SQL】Delete使用
目录 语法 需求 示例 分析 代码 语法 DELETE删除表中所需内容 删除表中满足特点条件的行:DELETE FROM 表名 WHERE 条件; 删除表中所有行:DELETE FROM 表名; WHERE子句 WHERE子句用于指定从表中选取记录的条件。允许筛选数据,只返回满足…...
KBQA前沿技术
文章目录 KBQA面临的挑战基于模板的方法基于语义解析的方法基于深度学习的传统问答基于深度学习的端到端问答模型KBQA面临的挑战 目前还存在两个很大的困难阻碍着KBQA系统被广泛应用。一个困难是现有的自然语言理解技术在处理自然语言的歧义性和复杂性方面还显得比较薄弱。例如…...
跨年烟花C++代码
嘿,朋友们!今天来给大家讲讲一段挺有意思的C代码呀,这段代码主要是用来实现一个烟花效果展示的程序哦,下面咱们一点点来看哈。 效果 1. 开头包含的那些头文件 #include <graphics.h> #include <conio.h> #include &…...
centos服务器 /1ib64/libm.so.6: version “GLIBc 2.27’ not found 异常
centos服务器 /1ib64/libm.so.6: version “GLIBc 2.27’ not found 异常 问题 在服务器使用open3d时,报错缺失GLIBC_2.27,因为后续操作出问题会导致服务器挂,所以最好先备份一下。 解决 查询glibc版本 输入指令查询系统glibc版本&#x…...
职场:如何快速适应职场新环境?
快速适应职场新环境是每个新员工都需要面对的重要挑战。为了能够顺利过渡并尽快融入新团队,以下是一些实用的策略: 1. 保持积极心态 开放心态:进入新环境时,保持开放的心态对于适应变化至关重要。要愿意接受新的挑战,…...
axios的替代方案onion-middleware
onion-middleware的由来 嗯。。。闲来无事瞎搞的!!!!主要用来实现请求/相应拦截,当然队列性的数据操作都是可以的 直接上使用教程 安装 npm install onion-middleware使用 import { OnionMiddleware } from onion…...
设计模式——泛型单例类
游戏中很多管理类都需要写成单例类,每次重复把管理类设置为单例类很繁琐, 这里直接写一个泛型单例类作为模板父类,方便其他需要写成单例类的类直接继承设置为单例类; using UnityEngine;public class Singleton<T> : Mono…...
三维卷积( 3D CNN)
三维卷积( 3D CNN) 1.什么是三维卷积 1.1 三维卷积简介 二维卷积是在单通道的一帧图像上进行滑窗操作,输入是高度H宽度W的二维矩阵。 三维卷积输入多了深度C这个维度,输入是高度H宽度W深度C的三维矩阵。在卷积神经网络中&…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
