配置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的安装与证书的申请,便开始进行证书的转换。
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,并输入
$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计算机上,再次远程桌面时将不再提示证书问题。