废话部分
上次写了 RDP远程桌面配置可信证书,有小伙伴说现在证书时长太短了,只有45天,不配置一套自动流程就没有灵魂,今天来折腾一下在win中使用win-acme自动获取证书,并自动配置的。
介绍
win-acme是一个适用于 Windows 的 ACMEv2 客户端,使用非常简单。
官网:https://www.win-acme.com/
Github:https://github.com/win-acme/win-acme
下载安装
- 去Github官网下载 ,如:
win-acme.v2.2.9.1791.x64.pluggable.zip,我这里用的是阿里云的DNS服务商,还需要下载一个阿里云插件,如果用了其它DNS服务商下载对应服务商的插件。

- 将 pluggable.zip 解压到本地目录,如:
C:\Program Files\acme - 在acme目录中创建
plugins插件目录,将plugin.validation.dns.aliyun.v.2.2.9.1701.zip中的dll文件解压到plugins目录。

获取阿里云 AccessKey ID 和 Secret
- 登录到阿里云控制台
- 进入RAM 访问控制
- 单独添加一个 dns管理用户,记录 AccessKey ID 和 Secret
- 给 dns 用户添加 AliyunDNSFullAccess 权限

申请证书
用命令行申请
打开命令行工具,进入win-acme目录 C:\Program Files\acme,执行申请命令
wacs.exe ^
--target manual ^
--host *.zengwu.com.cn ^
--host zengwu.com.cn ^
--validation aliyun ^
--aliyunapiid AccessKey ID ^
--aliyunapisecret Secret ^
--store pemfiles ^
--pemfilespath "C:\acme" ^
--installation script ^
--script "C:\acme\rdp.bat" ^
--scriptparameters "{CertCommonName} {StorePath} {CertThumbprint}"
参数说明
- target manual:使用完整模式申请
- host:域名,可以是泛型域名
- validation aliyun:启用阿里云DNS配置插件
- aliyunapiid:前面获取的阿里云AccessKey ID
- aliyunapisecret:前面获取的阿里云AccessKey Secret
- store pemfiles:输出为pem文件的证书
- pemfilespath:证书保存目录为
C:\acme - installation script:启用申请成功后执行脚本
- script:这里配置脚本,支持bat及ps1二种脚本,填写Exe程序也是可以的。这里创建了一个将证书自动导入到rdp服务的bat脚本
- scriptparameters:给脚本传参数
- {CertCommonName}:域名,就是第一个host值
- {StorePath}:证书保存目录。即
pemfilespath值 - {CertThumbprint}:证书指纹
运行,如果不出问题就完成了,还会添加一个Task Scheduler 计划任务。

ps:如果用了其他的DNS运营商,可以使用 wacs.exe --help 查看具体怎么配置相关验证参数

命令行页面操作详情
有的小伙伴可能不喜欢用纯参数,那就用命令行一条一条的来操作吧。
- 直接双击 安装目录下的
wacs.exe程序。 - 选择m完整配置

- 选择2手动配置,如果是为本地IIS配置证书的话,可以选择1自动导入。

- 输入域名,这里支持 *开头的泛型域名,多个域名用英文逗号隔开。

- 选项1使用DNS来验证,多域名或泛型域名的时候,只能用这个DNS来验证。

- 选择6 ALiYunDNS,这里安装的域名商插件都会在这里显示,我这里就安装了一个。

- 然后配置阿里云 AccessKey ID 和 Secret

- 回车选择默认的RSA算法,然后选择导出PEM格式

- 选择2 设置一个完成脚本。输入脚本绝对路径,参数

- 到此配置基本已经完成了,接下来就等待自动申请了

附上RDP远程服务脚本
把上次说的 RDP远程桌面配置可信证书 中写的一键完脚本导入,脚本文件 C:\acme\rdp.bat
配置区几个变量根据自己的环境来配置:
- OPENSSL:我装了git,里面只直用就拿来用了,不额外安装了。
- DEFAULT_PATH:证书所在目录,未传参数时使用该值
- DEFAULT_DOMAIN:证书域名,未传参数时使用该值
未传入参数时,需要配置 DEFAULT_PATH 和 DEFAULT_DOMAIN值,这二个参数也可以通过命令行参数传入。如: rdp.bat 域名 证书所在目录 证书指纹。 这个参数用于acme 自动调用时输入
@echo off
setlocal enabledelayedexpansion
:: =============== 配置区 ===============
:: openssl 安装绝对路径
set "OPENSSL=C:\Program Files\Git\mingw64\bin\openssl.exe"
:: 证书所在目录,未传参数时使用该值
set "DEFAULT_PATH=C:\acme"
:: 证书域名,未传参数时使用该值
set "DEFAULT_DOMAIN=*.zengwu.com.cn"
:: ======================================
:: =============== 读取参数 ===============
set "DOMAIN=%1"
set "STORE_PATH=%2"
set "THUMBPRINT=%3"
:: 判断未传参时,使用确认值
if not defined DOMAIN (
set "DOMAIN=%DEFAULT_DOMAIN%"
)
if not defined STORE_PATH (
set "STORE_PATH=%DEFAULT_PATH%"
)
:: 如果以 * 开头,则替换为 _ + 后续部分
if "%DOMAIN:~0,1%"=="*" (
set "SAFE_DOMAIN=_%DOMAIN:~1%"
) else (
set "SAFE_DOMAIN=%DOMAIN%"
)
set "PEM_FILE=%STORE_PATH%\%SAFE_DOMAIN%-crt.pem"
set "KEY_FILE=%STORE_PATH%\%SAFE_DOMAIN%-key.pem"
set "P12_FILE=%STORE_PATH%\_temp.p12"
:: 检查文件
if not exist "%OPENSSL%" ( echo 错误:OpenSSL 未找到 & exit /b 1 )
if not exist "%PEM_FILE%" ( echo 错误:PEM 未找到 & exit /b 1 )
if not exist "%KEY_FILE%" ( echo 错误:KEY 未找到 & exit /b 1 )
:: 第一步:使用 OpenSSL 将 PEM + KEY 合并为 P12(不设密码)
echo 正在生成 .p12 证书...
"%OPENSSL%" pkcs12 -export -in "%PEM_FILE%" -inkey "%KEY_FILE%" -out "%P12_FILE%" -passout pass:
if errorlevel 1 ( echo 生成 P12 失败 & exit /b 1 )
:: 第二步:将 .p12 导入到“计算机\个人\证书”(即本地计算机的“个人”存储)
echo "正在导入证书到“计算机\个人\证书”..."
certutil -f -p "" -importpfx My "%P12_FILE%" NoRoot
if errorlevel 1 ( echo 导入证书失败 & exit /b 1 )
:: 第三步:获取刚导入证书的指纹(SHA1 哈希)
:: 如果传了指纹跳过
if defined THUMBPRINT ( goto :found_thumbprint )
echo 正在获取证书指纹...
for /f "tokens=1,2 delims=: " %%a in ('certutil -store My') do (
set "NAME=%%a"
set "VALUE=%%b"
echo !VALUE! | findstr /i %DOMAIN% > nul && ( set "FOUND_CERT=1" )
:: 如果已找到目标证书,检查是否是哈希行
if defined FOUND_CERT (
echo !NAME! | findstr /i "sha1 hash " > nul && ( set "FOUND_HASH=1" )
if defined FOUND_HASH (
set "THUMBPRINT=!VALUE!"
goto :found_thumbprint
)
)
)
:found_thumbprint
if not defined THUMBPRINT ( echo 错误:未能获取证书指纹。& exit /b 1 )
echo 获取到的证书指纹:%THUMBPRINT%
:: 第四步:使用 wmic 将该指纹设置为 RDP 服务的 SSL 证书
echo 正在配置 RDP 使用该证书...
wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="%THUMBPRINT%"
if errorlevel 1 ( echo 错误:设置 RDP 证书失败。& exit /b 1 )
echo 操作完成!RDP 已配置使用新证书。
del "%P12_FILE%"
pause
评论区