目前在使用Windows的远程连接时默认是启用SSL加密的,可以通过配置远程桌面服务为RDP连接提供有效的数字证书以便提高安全性。但个人用户或没有部署域控制器的用户是无法通过这种途径修改RDP所使用的数字证书,而是默认使用自动生成的自签名证书来进行SSL加密,在不安全的环境中很容易遭受攻击,同时每次通过RDP协议连接主机都弹出一个危险警告窗口,让人看着觉得很不好:
因此可以通过使用自己的域名和CA签发的SSL证书来对Windwos远程连接进行有效加密。目前很多SSL证书也是可以比较方便签发而且免费的。目前阿里云、腾讯云都可以签发免费的一年期单域名证书,也可以在freessl.cn签发免费的一年期单域名证书,当然也可以使用Let’s Encrypt证书,不过有效期只有三个月,在没有自动化处理的情况下每三个月更换一次证书较为麻烦,因此建议签发一年期证书。
获取证书
首先你需要拥有一个域名,你需要拥有域名的DNS解析权。在申请证书时需要通过CNAME进行验证。签发过程不再赘述。
完成签发后一半会获得三个文件——certificate.pem(证书)、private.key(私钥)、fullchain.pem(证书链),由于需要形成证书链进行验证,因此通常是使用fullchain.pem而不是certificate.pem,即通常需要用到证书链和私钥,在Windows中使用到的是pfx(或p12)文件,可使用以下命令将证书链和私钥合并为pfx(或p12)文件
openssl pkcs12 -export -clcerts -in [fullchain.pem] -inkey [private.key] -out [your_domain.pfx]
其中的中括号部分([和])只是说明对应的文件名,需根据自己实际文件名来填写,不要将中括号( [ 和 ] )也写入命令中,your_doamin.pfx即输出的pfx文件(命名)。
导入证书
打开运行窗口(Win+R),输入mmc打开控制台。
单击 文件 > 添加/删除管理单元。
然后添加计算机账户的证书服务到控制台。
在个人证书中将pfx文件导入,点击导入后会打开证书导入向导,根据向导将pfx文件导入系统即可,注意打开时选择文件框默认为X509证书(*.cer、*.crt),切换为个人信息交换(*.pfx、*.p12即可看到证书)。
导入成功后双击证书,可以看到刚才导入的证书(链),选择SSL证书(因为证书链的原因,这里一般会列出两到三个证书,要选择的是你域名的证书),然后右键该证书 > 所有任务 > 管理私钥。
为NETWORK SERVICE服务添加读取密钥的权限。
再双击打开SSL证书信息,打开证书详细信息中的指纹项记录下来(这份证书同时也是本网站目前的SSL证书)。
修改注册表
打开运行窗口(Win+R),输入regedit打开注册表编辑器,进入以下路径。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
然后新建以下内容的项:
- 名称: SSLCertificateSHA1Hash
- 类型: REG_BINARY
将刚才记录的证书指纹手动输入(会自动大写,以两个字母为单位分列,不用输入空格一直输入下去直至输入完毕即可,无法复制粘贴)
完成所有步骤后即可再次通过RDP协议连接,也不会出现警告信息了。
注:RDP连接时要使用证书对应的域名连接(可以将该证书对应的域名解析到这台服务器的IP地址上),不能使用IP地址连接,否则仍然会出现警告信息。
RDP远程连接时,顶上工具条会有小锁图标,表明本次是安全的。