Windows Remote Desktop(俗称RDP)是一个Windows自带的远程桌面软件,允许用户通过网络从一个地点远程访问和控制另一台电脑,支持SSL加密连接,跨平台和无感操作等优点。
跨平台和操作就不说了,就直说这个SSL加密连接,居然是默认启用SSL加密,但是使用的证书是Windows系统自己生成的一个自签名证书,也不知道微软怎么想的。本篇文章就来深入Windows系统注册表修改远程桌面SSL证书
这应该是全互联网最简单的方法了(应该吧)
在我们对一台Windows电脑进行远程连接的时候,一般都会弹个窗,告诉我们”无法验证此远程计算机的身份”,也就是访问地址和证书对不上
因为Windows在安装的时候,会在系统内部生成一个以计算机名为域名的证书,非常鸡肋
不过你要是点击不再询问后也没啥,但是治标不治本,你换一台电脑连接还是会报错,所以我们就得想办法更换系统中RDP所使用的SSL证书
(连接安全到没啥,主要是看得舒服)
基本上顺序就是(可按需跳转):
1.申请SSL证书
SSL证书一般很好申请,网站用的和RDP用的其实都一样,在腾讯云和阿里云之类的大厂都可以申请到1年的免费SSL证书。以下是可以免费申请SSL证书的地址
这些SSL证书 不推荐 付费,那种企业级顶级加密证书也不是我们这种凡人能用的(如果你是富哥当我没说)
2.转换SSL证书
(这一步如果是阿里云和腾讯云申请的证书可以跳过,因为这两家官方提供PFX证书下载)
Windows所使用的证书和我们平常用的xxxxx.key
和xxxxx.crt
不同,Windows所使用的证书是
PKCS#12 证书标准,证书通常为xxxxx.pfx
由于大部分证书签发下来后都是key和pem格式,所以我们要转换为pfx才能给Windows使用
注意!老旧系统不支持最新的SSL加密协议,比如Windows Server 2012R2,在给老旧系统转换证书时要注意OpenSSL版本
这里我们下载 OpenSSL 进行转换,下载Win64 Light版就可以了,OpenSSL3.X版本不支持Windows Server 2012R2等老旧系统,如果要给老旧系统使用,请下载OpenSSL1.X版本! 下载好后随机安装到一个目录下,要记住安装路径
我们打开OpenSSL安装路径的/bin
目录,把我们申请到的证书放进去后把pem文件和key文件改名为myssl.pem
和myssl.key
放进去后我们打开cmd后cd到此目录,输入以下命令回车
openssl pkcs12 -export -in myssl.pem -inkey myssl.key -out myssl.pfx
它会让你输入两边私钥密码,要记住这个密码,添加证书时要用
完成后我们在此目录里找到myssl.pfx
这个文件,这就是我们转换后的文件,保存备用
3.添加SSL证书
这一步就是把我们已经下载或转换好的xxxxx.pfx
证书导入进系统里
我看了各大教程,都是很复杂的到mmc控制台添加管理单元再添加证书管理单元之类的
我自己摸索出个非常非常简单的方法,简单实用不劝退
- 我们把PFX证书放到桌面上(放哪都行,方便就好),直接双击进入证书导入向导
- 存储位置选”本地计算机”
- 导入文件,它已经给我选好了,直接下一步
- 输入密码,这密码是你下载证书压缩包里附带的密码,或者是你转换时输入的那两遍密码
- 证书存储位置选”个人”
- 点完成,即可导入成功
这时我们打开Win+R
输入certlm.msc
找到 个人→证书 就能看到我们添加的证书了
选定刚添加的证书右键 所有任务→管理私钥 在 用户→添加→高级→立即查找 在搜索结果里找到NETWORK SERVICE
双击添加确定即可
在用户里找到我们刚才添加的NETWORK SERVICE
选定后权限设置为可读取,设置好后点确定退出即可
然后我们双击证书,在详细信息里找到指纹,复制值备用
这时我们证书就算添加好了
4.配置SSL证书
这里有三个办法,亲测每个都可用
这三种方法都不用重启,保存即生效
第一种 使用PowerShell(新系统支持友好,老系统不支持)
打开PowerShell(管理员)输入:
$thumbprint = "{SSL证书指纹}"
$path = (Get-WmiObject -Namespace root\cimv2\TerminalServices -Class Win32_TSGeneralSetting -Filter 'TerminalName="RDP-Tcp"').__path
Set-WmiInstance -Path $path -argument @{SSLCertificateSHA1Hash="$thumbprint"}
示例:
$thumbprint = "f341456258ea10bd2e2f97542a1ce537b357159b3"
$path = (Get-WmiObject -Namespace root\cimv2\TerminalServices -Class Win32_TSGeneralSetting -Filter 'TerminalName="RDP-Tcp"').__path
Set-WmiInstance -Path $path -argument @{SSLCertificateSHA1Hash="$thumbprint"}
第二种 使用WMIC(老系统普遍支持,新系统逐渐废弃)
打开PowerShell(管理员)输入:
wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="{SSL证书指纹}"
示例:
wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="f341456258ea10bd2e2f97542a1ce537b357159b3"
第三种 修改注册表(通吃,前两者都不能用再用这个)
打开注册表,打开以下路径
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
在此路径下新建一个SSLCertificateSHA1Hash
的二进制值后双击在数值数据内填入SSL证书指纹,确定即可
到这我们基本上就配置好了,连接后也不会有不安全弹窗了,连接也会更安全(舒服多了)
参考资料:阿龙的笔记 (刚发没三小时我就顺过来了XD)
本文作者:薄荷の尾巴
本文链接:https://blog.hoshiroko.com/archives/b2ebf38631d9
版权声明:本文章采用 BY-NC-SA 许可协议。转载请注明出处并使用相同协议!