









Windows 远程连接时是不是一直弹出证书错误警告?这是因为远程连接服务端默认生成的是自签证书,默认是不受信的。所以我们需要像建网站配置 HTTPS 那样,为 Windows 远程桌面服务端配置一个有效的 SSL 证书。本教程会使用 Win-ACME,通过自动添加 Cloudflare DNS 记录来签发一个域名证书,并应用到远程桌面连接,同时自动续期。
打开 Cloudflare 仪表板 并登入,点击右上角的人像图标,点击设定档,再点击左侧的 API 权杖,点击建立 Token。

在 API 权杖范本中,选择预设的「编辑区域 DNS」范本,然后修改以下 Token 名称,并在下面的区域资源中选择你的域名。其它如客户端 IP 和 Token 起止时间就看你需要,一般不填。

然后点击继续,建立 Token,之后复制你的 Token 即可。Token 只会显示一次,可以先粘贴在记事本里备用。
打开 Win-ACME 官网,点击菜单栏的 Download,然后下载带有「larger download, plugin support」的完整版本,不要下第一个 recommend 的版本,如图。然后你下载的压缩包的文件名应该是带有「pluggable」字样的。

然后将压缩包解压到一个固定目录,如 C:\Users\<用户名>\AppData\Local\Win-ACME,或者看你喜欢。
接下来还要下载用于 Win-ACME 的 Cloudflare DNS 插件,打开 项目的发布页,下载 plugin.validation.dns.cloudflare.<版本号>.zip(如果你使用其它 DNS 服务商,可以点击 Show all assets,然后看看有没有你用的)。之后将下载的 zip 里的 dll 文件解压到相同目录下,和 wacs.exe 处于同层目录,如图(我文件夹里的内容应该比你的多一些,因为我已经运行过一次了):

接下来需要编辑 settings_default.json,在约 84 行找到 "DnsServers": [ "[System]" ],,表示程序检验 DNS 记录是否添加成功所使用的 DNS。由于系统默认用的 DNS 可能有点问题,这里我们就手动指定 DNS,将这一行改成下面这样(注意有缩进):
"DnsServers": [ "119.29.29.29", "223.5.5.5", "1.0.0.1" ],
同时,为了让 Win-ACME 能在续期完成后,自动将更新的 SSL 证书套用到远程桌面连接上,还需要写一个 Script,用于自动接收新证书的 SHA-1 指纹,并应用于远程连接。在当前目录,新建一个 bind-rdp.bat 文件,写入以下内容并保存:
@echo off
wmic /namespace:\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="%1"命令里的 %1 表示接收第一个参数,稍后我们签发证书时会将发送给脚本的第一个参数设置为 SHA-1 指纹。
然后 Win + X,选择 Windows PowerShell(系统管理员),然后 cd 进 Win-ACME 的目录,然后执行以下命令,<> 根据实际需要替换:
.\wacs.exe --source manual --host <域名> --friendlyname "<名称>" `
--validation cloudflare `
--cloudflareapitoken "<Cloudflare API Token>" `
--csr ec `
--store certificatestore `
--certificatestore My `
--acl-fullcontrol "NETWORK SERVICE,Administrators" `
--installation script `
--script "C:\Users\<用户名>\AppData\Local\Win-ACME\bind-rdp.bat" `
--scriptparameters "{CertThumbprint}" `
--setuptaskscheduler `
--accepttos --emailaddress "<邮箱>"命令说明:
--source manual:手动指定域名--host <域名>:需要签发的域名,以逗号分隔--friendlyname "<名称>":设置一个名称,便于区分。可随意命名,例如 [Win-RDP] + 域名--validation cloudflare:使用 Cloudflare 自动 DNS 记录验证--cloudflareapitoken "<Token>":你的 API Token--csr ec:使用椭圆曲线密钥--store certificatestore:存储在 Windows 证书存储区中--certificatestore My:存储在 Windows 证书存储区中的「个人」目录(运行 certlm.msc 可以看到)--acl-fullcontrol "NETWORK SERVICE,Administrator":允许这些用户使用密钥(远程链接服务使用 NETWORK SERVICE 用户)--installation script:在一次成功签发/续期后,运行脚本--script "<位置>":脚本的位置--scriptparameters "{CertThumbprint}":给脚本传入证书 SHA-1 指纹作为参数--setuptaskscheduler:设定一个自动续期计划程序--accepttos:接受 Let's Encrypt 许可协议--emailaddress "<邮箱>":填入邮箱用来接收通知,例如证书出问题等等(一般不会发)回车后,稍作等待,出现成功提示即可,如图:

这样就行了,现在尝试远程连接,应该就不会报证书错误了,点左上角的锁图标也可以看到证书信息。另外,程序也设定了一个计划任务,每天会检查证书有效期,如果快到期了会自动续签。续签之后也会触发 Script,将新证书自动绑定在远程桌面连接上。

其实大概半年前就像写这个教程了,但后面换成了 Linux(Kubuntu 26.04)作为主系统,教程就搁置了。现在又换回 Windows 了,遂补全😇。还是妥协了,太多软件/游戏不能在 Linux 下面完美运行,加上又购买了 Microsoft 365 Business 订阅,最终还是回到了 Windows(10 IoT LTSC)。
更多教程欢迎回到 主页 阅读,也欢迎留言喵。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。