配置Windows远程桌面的证书

0x00 背景

在使用 RDP (Windows Remote Desktop) 时，无论是输入 IP 地址还是域名都会提示无法验证远程计算机的身份，是否仍要连接？

而在 macOS 设备上，会弹出如下的提示，与 Windows 的提示大意相同，都是在表明将要连接的计算机所使用的是不被信任的证书。

这个证书是在 Windows 安装的过程中以计算机名称为域名的证书，不被信任也是合理的。虽然在 Windows 下点了不再提示后便再也不见，但在 macOS 客户端上仍会有此提示。故要想完整的解决这个证书问题，只能修改被连接计算机系统中的 RDP 所使用的 SSL 证书文件。

在正式进入下列步骤之前，确保已经拥有了域名与相应的证书文件。

0x01 前提准备

若使用的国内云厂商（如阿里云、腾讯云等）提供的证书，可以选择 PFX 证书下载以作备用。而使用acme.sh 进行申请所得到的证书有your.domain.key和your.domain.crt。需要注意的是，Windows 并不能直接使用此类证书，而是采用了PKCS#12标准证书，样式通常为上述所提到的your.domain.pfx。

转换证书可以使用OpenSSL操作。假使已经完成了 OpenSSL 的安装与证书的申请，便开始进行证书的转换。

Copy
openssl pkcs12 -export -in your.domain.pem -inkey your.domain.key -out your.domain.pfx

执行上述命令后会提示键入私钥密码，记住此密码，稍后添加证书时需要使用。完成后将在当前工作目录下找到需要的your.domain.pfx文件。

0x02 添加证书

将上一步得到的证书上传到 Windows 计算机中，并双击打开，会弹出证书导入向导。

存储位置：本地计算机

要导入的文件：直接点击下一步即可

私钥保护：此处输入上一步中键入的密码

证书存储位置：个人

点击完成后即可导入成功。此时已将上一步中的 pfx 证书文件导入到 Windows 中。但只导入证书还不能达到使用此证书作为 RDP 证书的效果。

使用快捷键Win+R ，输入certlm.msc ，打开本地计算机证书管理器。在个人→证书列中可以发现刚刚导入的证书。右键此证书→所有任务→管理私钥，在打开的对话框中点击添加，输入NETWORK SERVICE 并点击确定。给NETWORK SERVICE以允许读取的权限。

点击确定即可保存权限。

再次双击此证书，点击详细信息，在字段中找到指纹字段项，点击后将对应的值复制作备用。

0x03 配置 SSL 证书

此时需要将证书指纹配置到注册表中。

假使上述得到的指纹为yourprivatefingerprint 。右键 Windows 菜单，以管理员身份运行 PowerShell，并输入

Copy
$fingerprint = "yourprivatefingerprint"
$path = (Get-WmiObject -Namespace root\cimv2\TerminalServices -Class Win32_TSGeneralSetting -Filter 'TerminalName="RDP-Tcp"').__path
Set-WmiInstance -Path $path -argument @{SSLCertificateSHA1Hash="$fingerprint"}

到此处已经配置完成了 Windows RDP 的证书。若证书对应的域名已经解析到此 Windows 计算机上，再次远程桌面时将不再提示证书问题。

此文由 Mix Space 同步更新至 xLog
原始链接为 https://blog.allieqian.com/posts/tech/8EandzDrRKcdQn