Weyu‘s blog

  • 序言
  • 准备工具
  • 使用说明
  • 首页
  • 代码
  • 作品
  • 学习
  • 折腾
  • 随笔
  • 关于博主
  • 时光映像
  • 我的网盘
  • 文章归档
  • 友情链接

windows下使用certbot续订/申请SSL域名证书

  • admin
  • 2025-09-29
  • 0

序言

本来使用的是宝塔的SSL一键申请Let's Encrypt的免费证书,经过Nginx反代自建网盘系统.三个月手动续一次证书,使用起来倒也方便.
今天为了测试远程访问家里Nas系统+网盘程序的传输效率,我向网盘程序里导入了几个10gb左右的电影原盘文件.然后远程环境使用电脑/手机浏览/在线播放这些视频文件,发现加载时会卡几十秒黑屏,播放进度条往前推动也会导致家里的Nas疯狂上传,这边还继续卡住,当时就停止测试了

后来mstsc远程装几个服务,发现部分操作有延迟现象,然后查看定位到硬盘有持续大量读取与写入文件问题,定眼一看"Nginx","temp"直接我勒个草,忽然联想到之前测试远程预览大电影,都关了网站十几分钟的时间,那边Nginx还在往缓存里磨硬盘呢?

这个问题之前处理过,可以进网站-xxx.site-反向代理-配置里面去微调缓存参数解决该问题,但我目前整个宝塔就带了一个网盘,觉得没必要.刚好网盘内置了SSL监听功能,所以直接卸载宝塔,手动申请Let's Encrypt证书!

准备工具

  • certbot Windows版本下载并安装 Github下载链接
  • 新建一个run.bat,将下面批处理代码粘贴进去
@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"

echo 请确保安装了Certbot,如未安装可以前往下载 https://github.com/certbot/certbot/releases/download/v2.9.0/certbot-beta-installer-win_amd64_signed.exe
echo 脚本作者by.yanhy2000
echo 申请证书需要准备一个邮箱,邮箱第一次申请会自动注册,只需要两次输入"y"并回车即可
echo 验证证书需要手动添加修改DNS的TXT记录
set /p email="请输入您的邮箱地址: "
set /p domain="请输入您的域名: "

certbot certonly -m %email% -d "%domain%" -d %domain% --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory

if %errorlevel% neq 0 (
    echo 证书申请过程中发生错误。
    pause
    exit /b %errorlevel%
)

echo 证书申请成功。
pause

其中,执行certbot程序的指令简单分析一下

certonly 安装模式
-m 申请证书所需的邮箱
-d 申请证书的域名
--manual 使用交互式或脚本钩子的方式获取证书
--preferred-challenges dns 使用 DNS 方式校验域名所有权
--server Let's Encrypt指定的V2版本接口

使用说明

这是批处理整个流程图

  1. 以管理员权限运行run.bat
  2. 如果邮箱第一次申请,会提示注册等,可以直接输入y回车(可能有两次)
  3. 随后去域名注册商或解析托管厂商新增一条类型为txt的解析记录指向_acme-challenge.xxx.site(xxx.site为你第一步填写的域名),值为流程图中的followingValue下面的一行字符串
  4. 等待几分钟
  5. 清理DNS缓存:win+r,输入CMD回车,输入ipconfig /flushdns回车
  6. 在cmd中验证该解析是否已经生效:nslookup -qt=txt _acme-challenge.xxx.site如未生效请重复步骤4-步骤6
  7. 验证解析生效后敲回车等待批处理进入下一流程内部验证
  8. 如果成功则将输出包含Successfully,过期时间,公钥私钥文件路径快捷方式
  9. 如果失败请仔细检查你的解析记录,网络,代理等

© 2025 Weyu‘s blog
  • {{ item.name }}
  • {{ item.name }}