Windows系统 RDP 远程桌面默认使用自签名 SSL 证书来连接,使用 RDP 远程桌面会提示「无法验证此远程计算机的身份、证书来自不信任的证书验证机构」

rdpdefaultcrt.webp

这个提示非常让人不爽(反正我看着不爽),如果你已经配置好了使用域名访问RDP我们可以为被控系统的RDP添加证书来解决这个问题

前提要求

  • 已经配置好域名访问的RDP桌面

  • 被控机安装有python环境

申请证书

可以参考我的这篇文章使用acme.sh为你的域名申请证书,或是使用阿里云、腾讯云等提供的单域名免费证书,申请证书以后你会获取到一个 pem/ crt 证书文件和一个 key 密钥文件,需要将其转换为PKCS12/JKS格式使用。通常可以使用openssl对证书进行转换:

openssl pkcs12 -export -clcerts -in [your_domain_crt.pem] -inkey [your_domain_key.key] -out [your_domain.p12]

当然如果你使用acme申请证书也可以使用acme内置的--toPkcs方法对证书进行转换

acme --toPkcs -d fridayssheep.top -d *.fridayssheep.top --password 114514

实在不行可以使用在线证书转换

usewebcrtcover.webp

导入证书

访问这个项目将Release内的Source Code下载下来:RDPAutoCertificate

解压后在被控端使用管理员权限运行这个脚本

python "C:\Users\Fridayssheep\Downloads\RDPAutoCertificate-Release\rdp_cert_install.py"

在提示中输入你的pfx证书位置和密码(输入密码过程中不会显示)

PFX/P12 certificate path: "C:\certs\rdp.example.com.pfx"
PFX password (press Enter if empty):

出现类似的输出即是导入成功

Granted NETWORK SERVICE read access to private key: C:\ProgramData\Microsoft\Crypto\Keys\37******************************************************
Imported certificate subject: CN=fridayssheep.top
Imported certificate thumbprint: **********************************
RDP listener certificate binding updated.

当然你可以带上参数直接提供证书位置和密码或者通过环境变量提供密码(?

# 使用参数提供密码
python rdp_cert_install.py -f C:\certs\rdp.example.com.pfx -p "your-pfx-password"
# 使用环境变量提供密码
$env:RDP_PFX_PASSWORD = "your-pfx-password"
python rdp_cert_install.py -f C:\certs\rdp.example.com.pfx

验证访问

使用你配置的域名访问你的远程桌面连接,若警告不再弹出且RDP连接状态栏出现一把锁则证书添加成功

usecrtrdp2.webp
usecrtrdp1.webp.webp

你也可以在被控端搜索管理计算机证书应用打开转到个人-->证书分区内来检查你的证书

confirmprivatekeypermission.webp