使用SSL证书为Windows(非Server)远程桌面RDP连接加密
服务器运维
2018-04-11
182
0

本文用于解决远程桌面连接中“无法验证此远程计算机的身份。”这一问题,具体症状如下图所示,强迫症福音!

  • 本文主要介绍非Server系统中无法使用专用工具,转而修改注册表的方法
  • 本文假定您已对SSL证书有一定的了解,或最好已经成功的申请到了服务器SSL/TLS证书
  • 本文演示使用免费的StartSSL证书,其他机构签发的证书大同小异

原理分析

也不知是从哪一个版本开始,微软开始为远程桌面加入了SSL加密功能,并且是默认开启。

导致这个问题的原因实际是系统使用了一个自签名的默认证书,而这个自签名证书对于客户端来说是不可信的,也就是说无法用于证明服务端的身份,客户端自然就会报告其不安全。

那么解决的思路就有了,那就是我们为服务端添加一个可信的证书,并在远程桌面连接中让系统使用这个证书。

首先获得一个这样的证书并不难,只要你已经有至少一个可用的域名,那么StartSSL便可以免费为你提供;

然后导入这个证书也不难,只要参照配置https服务的方法,直接导入就行了;

那么问题在哪儿呢?那就是证书导进去了,系统却不使用。

这个问题在Server版当中据说有专门的工具解决,但桌面版却并没有,所以最后就只好修改注册表,将要用的证书的指纹填进去,告诉系统该用哪个证书,然后问题就解决了。


操作步骤

第一步 导入证书

已经用证书配置好https的可以跳过第一步。

我之前已经申请好证书了,在这里就不演示申请过程了,关于StartSSL免费证书的教程很多,可以自行百度之。

申请到证书后,在我们手中的应该是一个 *.p12 的证书文件, 放在一边备用。

如果手上只有 私钥 *.key 和 证书 *.crt ,请使用StartSSL的控制台工具:Tool Box -> Create PKCS#12 (PFX) File,按照表单提示,提供私钥和证书内容,并设定一个密码,然后选择继续来生成.p12文件,熟悉linux的也可以用openssl命令行大法搞定。

首先按下‘Win + R’,进入“运行”,键入“mmc”,打开“管理控制台”。

在 文件 中选择 添加/删除管理单元 。

在左侧选中 证书 后点击 添加 。

在弹出的对话框中选择 计算机账户,点击 下一步 。

之后选择 本地计算机(保持默认) 然后点击 完成 ,再然后点击 确定 。

在 证书-个人 上点击 右键 ,选择 所有任务-导入 。

按照向导点击 下一步 ,之后选择你的 证书文件 (p12格式的证书文件选择时需要更改文件类型才可以找到),之后需要输入之前设置的密码,证书存储 选择 根据证书类型,自动选择证书存储 ,然后点击下一步即可。



导入完成后如下图所示:


第二步 分配权限

首先在已经导入的证书上点击 右键 ,选择 所有任务-管理私钥 。

之后添加 NETWORK SERVICE 用户。

至少要将 读取 权限分配给 NETWORK SERVICE ,然后确定。


第三步 编辑注册表

首先是按下‘Win + R’,进入“运行”,键入“regedit”,打开“管理控制台”。

展开路径 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp ,然后添加如下项:

名称: SSLCertificateSHA1Hash

类型: REG_BINARY

之后回到之前的证书管理,双击打开已经导入的证书,在 详细信息 中选择 指纹 ,并记录下方的值。

最后将记录的值填入之前新建注册表项的 数据 位置。

至此便大功告成!请尽情使用吧!


注意事项

这个方法以拥有域名为基础,这也是申请免费SSL证书的条件,没有特殊需要的话也很便宜。
证书设置完成后,访问远程桌面服务器就需要填写域名方式访问,而如果以局域网机器名访问的话,会提示名称不匹配。

实际上,SSL证书只是和FQDN (fully qualified domain name,全称域名)绑定对应的,所以IP是什么根本无所谓,通过本地host或者本地DNS解析的方式映射上域名理论上也都是可以的。

RDP