1. 准备域名及证书
首先需要给远程服务器配置一个域名,然后给域名配置一个ssl证书。证书可以去acme免费申请,也可以使用自签证书,一般来说可以得到一个pem文件和一个key文件。再使用openssl来生成p12文件。
openssl pkcs12 -export -clcerts -in [your_domain_crt.pem] -inkey [your_domain_key.key] -out [your_domain.p12]
2. 导入证书
在被远程的计算机中,按Win+R打开运行页面,输入certlm.msc打开证书管理页面,选择计算机->个人->证书,选择刚生成的p12证书

3. 获取证书指纹
双击打开刚导入的证书详细信息,复制指纹值

4. 配置 RDP 服务使用证书
直接使用wmic命令来现实
wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="<刚才获得的Hash>"

5. 验证
按 win+r输入regedit打开注册表,找到 *SSLCertificateSHA1Hash 是否为设置的证书指纹值
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\SSLCertificateSHA1Hash
6. 附上一键配置 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
注:因为涉及向“计算机账户”导入证书和修改 RDP 配置,必须 以管理员权限运行此批处理。如果是以Administrator用户登录的当这话没说哈。
评论区