Certbot签发和续费泛域名SSL证书(通过DNS TXT记录来验证域名有效性)
我们在使用let’s encrypt获取免费的HTTPS证书的时候,let’s encrypt需要对域名进行验证,以确保域名是你自己的
之前用默认的文件验证方式总有奇怪的问题导致失败,我也是很无奈,于是改用验证DNS-TXT记录的方式来验证,而且貌似如果申请泛域名证书也只能通过这个方式验证
本来呢我只打算在这篇记一下验证DNS记录的方式签发证书,不过以前也没写过如何用certbot签发免费Let’s Encrypt SSL证书诶,那正好就重头把过程写一遍。
一、安装Certbot
1.1 根据官网提示步骤安装
先去Certbot 官网,在网页上选择使用的服务器软件和系统版本,会跳转到安装的文档,
根据提示的步骤安装即可
1.2 使用自动安装脚本安装
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto # 给脚本执行权限
接下来直接使用该脚本进行签发证书等操作即可
第一次使用该脚本时会自动安装依赖。
官网提示的通过软件包管理安装的certbot,之后是可以直接使用certbot命令进行操作的
我接下来的描述中,执行命令默认是直接用certbot命令
如果你是用自动安装脚本certbot-auto的话,直接用这个脚本进行操作,我下面描述的命令里的certbot换成./certbot-auto
二、获取SSL证书
2.1 获取签发证书(standalone)
直接使用certbot
certonly命令即可开始签发,根据提示,先选择模式,一般选择standalone(使用standalone需要先停止nginx等服务器运行),然后根据提示列出需签的域名,之后会开始验证,通过之后会将生成的证书文件保存。
2.2 获取泛域名签发证书
获取泛域名签发证书(manual,通过DNS-TXT记录来验证域名有效性)
标题上线啦,这篇主要还是来讲这个验证问题的,感觉用这种方式签发更稳当一点。
certbot certonly --preferred-challenges dns -d "*.example.com" -d example.com --manual
用这个命令来手动验证DNS签发
这里我用example.com来假设要签的域名,-d后面跟着一个域名,如果有多个域名要签的话记得每一个单独的域名前都要写-d。
我指定了两个-d参数,因为certbot的泛域名其实只支持诸如*.example.com,如要直接使用example.com,就得为其单独也签发一条。
回车执行之后,会开始提示你给你的域名添加TXT解析记录。
这里将提示你为域名添加一个_acme-challenge的TXT记录,记录值为生成的一串字符。
这个只需要你去DNS服务商那里添加即可,这里如果你 -d 了几条不同的二级域名,那每个二级域名都要添加记录;在你添加完一个域名的记录值,在控制台回车之后会提示你下一个域名的记录值
在你添加完记录保存之后,最好要检查一下解析记录。
在其他终端输入下面命令(示例example.com,记得修改):
nslookup -type=txt _acme-challenge.example.com 8.8.8.8
# 或者
dig -t txt _acme-challenge.example.com
如果包含你所添加的记录值,那么说明添加成功
那现在就可以控制台继续回车,不会意外就会把签发的证书文件保存,控制台打印出来证书文件的存放位置,一般情况下是会保存在/etc/letsencrypt/live/example.com目录下
这个目录下一般会有四个文件:
cert.pem: 服务器证书
chain.pem: 包含Web浏览器为验证服务器而需要的证书或附加中间证书
fullchain.pem: cert.pem + chain.pem
privkey.pem: 证书的私钥
我们一般用fullchain.pem和privkey.pem就可以了
三、在Nginx配置使用证书
这里我就不展开说了,监听的443端口设置ssl_certificate和ssl_certificate_key基本上就可以了
我这里贴上我自己的一段示例
server {listen 443 ssl;server_name example.com;ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;ssl_session_timeout 10m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;location / {# 你自己配置;}
}
四、证书续期与注销
4.1 续期
免费的let’s encrypt有3个月的时间,到期前需要续期
第一次使用certbot签时如果输入了邮箱地址,证书快到期前是会发邮件提醒你的
单域名使用下面的命令续期
certbot renew --dry-run
设置自动续期的话,只需要写脚本放在Cron中定时运行即可,crontab -e打开crontab脚本,添加如下的脚本
0 3 */7 * * /bin/certbot renew --renew-hook "/where/your/nginx -s reload"
这个脚本表示每隔 7 天,夜里 3 点整自动执行检查续期命令一次。续期完成后,重启 nginx 服务
添加完后重启cron服务即可
service crond restart
泛域名通过DNS-TXT记录(自动)续期
这个就稍微麻烦一点,我们需要使用到DNS服务商提供的API,在renew证书时可以自动添加更新TXT记录来实现自动更新,当然一般还需要DNS服务商给用户提供的API密钥确保安全等
我先列出一些DNS插件的地址,具体的可以去查看插件安装使用方法,当然其他第三方的DNS插件也可以在github里找找
certbot提供的DNS插件列表
阿里云DNS插件
dnspod插件(腾讯云)
我这里使用的是DNSPOD,于是我也就只描述以下使用dnspod插件的情况
下载certbot-auth-dnspod脚本
wget https://raw.githubusercontent.com/al-one/certbot-auth-dnspod/master/certbot-auth-dnspod.sh
chmod +x certbot-auth-dnspod.sh
- 获取用户DNSPOD token
登录dnspod后,在控制台的用户中心 -> 安全设置下找到「API Token」,开启并创建token后,复制下id和token
- 配置token信息
echo "id,token" > /etc/dnspod_token
把id和token换成刚刚复制下来的真实内容 接下来就可以使用插件进行续期了
certbot renew --manual --preferred-challenges dns --manual-auth-hook /path/to/certbot-auth-dnspod.sh --force-renewal
如果要自动续期,就可以将下面的代码加入crontab中再重启cron服务,具体的过程上面说过了,这里也不再赘述
29 3 1 * * root /bin/certbot renew --manual --preferred-challenges dns --manual-auth-hook /path/to/certbot-auth-dnspod.sh --force-renewal --post-hook "/where/your/nginx -s reload"
这是每个月1号3点29分执行一次强制证书更新后重启nginx
当然用插件进行申请证书自动DNS验证也是可以的
certbot certonly --manual --preferred-challenges dns-01 --email mail@domain.com -d laravel.run -d *.example.com --server https://acme-v02.api.letsencrypt.org/directory --manual-auth-hook /path/to/certbot-auth-dnspod.sh
4.2 注销
使用下面的命令可以查看已生成的证书信息,包括证书名称,包含的域名,到期时间以及证书文件路径
certbot certificates
找到你要注销的证书,复制下证书文件的路径,然后使用下面的命令注销
certbot revoke --cert-path /etc/letsencrypt/live/example.com/fullchain.pem
参考链接:https://blog8.flyky.org/20191108/certbot-DNS-TXT-check/
相关文章:
Certbot签发和续费泛域名SSL证书(通过DNS TXT记录来验证域名有效性)
我们在使用let’s encrypt获取免费的HTTPS证书的时候,let’s encrypt需要对域名进行验证,以确保域名是你自己的 之前用默认的文件验证方式总有奇怪的问题导致失败,我也是很无奈,于是改用验证DNS-TXT记录的方式来验证,而…...
PY32F003F18之RTC
一、RTC振荡器 PY32F003F18实时时钟的振荡器是内部RC振荡器,频率为32.768KHz。它也可以使用HSE时钟,不建议使用。HAL库提到LSE振荡器,但PY32F003F18实际上没有这个振荡器。 缺点:CPU掉电后,需要重新配置RTCÿ…...
redis主从从,redis-7.0.13
redis主从从,redis-7.0.13 下载redis安装redis安装redis-7.0.13过程报错1、没有gcc,报错2、没有python3,报错3、[adlist.o] 错误 127 解决安装报错安装完成 部署redis 主从从结构redis主服务器配置redis启动redis登录redisredis默认是主 redi…...
力扣-338.比特位计数
Idea 直接暴力做法:计算从0到n,每一位数的二进制中1的个数,遍历其二进制的每一位即可得到1的个数 AC Code class Solution { public:vector<int> countBits(int n) {vector<int> ans;ans.emplace_back(0);for(int i 1; i < …...
【Leetcode】 17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits "23" 输出&…...
洛谷P1102 A-B 数对题解
目录 题目A-B 数对题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示传送门 代码解释亲测 题目 A-B 数对 题目背景 出题是一件痛苦的事情! 相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 AB Problem,改用 …...
【Linux进行时】进程地址空间
进程地址空间 例子引入: 我们在讲C语言的时候,老师给大家画过这样的空间布局图,但是我们对它不了解 我们写一个代码来验证Linux进程地址空间 #include<stdio.h> #include<assert.h> #include<unistd.h> int g_value100; …...
批量将文件名称符合要求的文件自动复制到新文件夹:Python实现
本文介绍基于Python语言,读取一个文件夹,并将其中每一个子文件夹内符合名称要求的文件加以筛选,并将筛选得到的文件复制到另一个目标文件夹中的方法。 本文的需求是:现在有一个大的文件夹,其中含有多个子文件夹&#x…...
TensorFlow入门(一、环境搭建)
一、下载安装Anaconda 下载地址:http://www.anaconda.comhttp://www.anaconda.com 下载完成后运行exe进行安装 二、下载cuda 下载地址:http://developer.nvidia.com/cuda-downloadshttp://developer.nvidia.com/cuda-downloads 下载完成后运行exe进行安装 安装后winR cmd进…...
90、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->Hash 相关命令
本次讲解要点: Hash 相关命令:是指value中的数据类型 启动redis服务器: 打开小黑窗: C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe red…...
我开源了一个加密算法仓库,支持18种算法!登录注册业务可用!
文章目录 仓库地址介绍安装用法SHA512HMACBcryptScryptAESRSAECC 仓库地址 仓库地址:https://github.com/palp1tate/go-crypto-guard 欢迎star和fork! 介绍 此存储库包含用 Go 编写的全面的密码哈希库。该库支持多种哈希算法,它允许可定制…...
FPGA设计时序约束二、输入延时与输出延时
目录 一、背景 二、set_input_delay 2.1 set_input_delay含义 2.2 set_input_delay参数说明 2.3 使用样例 三、set_output_delay 3.1 set_output_delay含义 3.2 set_output_delay参数说明 3.3 使用样例 四、样例工程 4.1 工程代码 4.2 时序报告 五、参考资料 一、…...
电阻的基础与应用
文章目录 电阻的基础与应用电阻的介绍与分类电阻介绍电阻的分类碳膜/金属膜电阻厚膜/薄膜电阻功能性电阻(光敏/热敏/压敏)特殊电阻(绕线电阻/水泥电阻/铝壳电阻) 电阻的主要厂家与介绍国外厂家VISHAY(威世)KOA(兴亚)Kyocera(京瓷)…...
5.html表格
<table><tr><th>列1标题</th><th>列2标题</th><th>列3标题</th></tr><tr><td>行1列1</td><td>行1列2</td><td>行1列3</td></tr><tr><td>行2列1</td>…...
飞桨EasyDL-Mac本地部署离线SDK-Linux集成Python
前言:本文对使用飞桨EasyDL桌面版实现本地部署物体检测做一下说明 一、训练模型 如何使用飞桨EasyDL桌面版这里就不再赘述,直接参照官方文档进行物体检测模型训练。 飞桨EasyDL桌面版-用零代码开发实现物体检测https://ai.baidu.com/ai-doc/EASYDL/Tl2…...
【kubernetes】Kubernetes中的DaemonSet使用
目录 1 为什么需要DaemonSet2 DaemonSet的Yaml的关键字段3 DaemonSet的使用4 一种自行控制Pod更新的方式5 总结 1 为什么需要DaemonSet Deployment可以用于部署无状态的应用,例如系统的接口层或者逻辑层,而多个Pod可以用于负载均衡和容灾。如果有这样一…...
《 新手》web前端(axios)后端(java-springboot)对接简解
文章目录 <font color red>1.何为前后端对接?2.对接中关于http的关键点2.1. 请求方法2.2. 请求参数设置简解: 3.对接中的跨域(CROS)问题**为什么后端处理跨域尽量在业务之前进行?**3.总结 1.何为前后端对接? “前后端对接” 是指前端和后端两个…...
第七章 查找 十、散列查找
一、哈希表(散列表) 哈希表的数据元素的关键字与其存储地址直接相关。 二、解决冲突的方法 三、散列表中元素的查找 总共对比了3个关键字,所以查找长度为3. 四、查找效率计算 (1)成功的概率 需要对比一次的关键字为…...
第一章 C语言知识补充
求字节数运算符:sizeof 强制类型转换运算符:(类型) 下标运算符:[ ] 函数调用运算符:( ) 算术移位指令 算术移位指令有:算术左移SAL和算术右移SAR。算术移位指令的功能描述如下:…...
【Book And Paper 】
【paper Interactive Segmentation of Radiance Fields 算法设计: 电子版...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
