使用受信任的SSL/TLS证书保护RDP连接

时间:2020-01-09 10:46:53  来源:igfitidea点击:

本文很好地展示了如何使用受信任的SSL/TLS证书来保护与Active Directory域中Windows计算机或者服务器的RDP连接的安全。我们将使用可信的SSL证书代替默认的自签名RDP证书(然后使用自签名的RDP证书,当用户连接到主机时,用户会收到一条警告,提示该证书不受信任)。在此示例中,我们将在证书颁发机构和组策略中配置自定义RDP证书模板,以自动颁发SSL/TLS证书并将其绑定到远程桌面服务。

远程桌面连接(RDP)自签名证书警告

默认情况下,为了保护RDP会话的安全,Windows会生成一个自签名证书。在使用mstsc.exe客户端第一次连接到RDP/RDS主机的过程中,用户会看到以下警告:

由于远程计算机的安全证书有问题,无法对其进行身份验证。继续进行是不安全的。
证书错误:证书不是来自受信任的证书颁发机构。
The remote computer could not be authenticated due to problems with its security certificate. It Jan be unsafe to proceed.
Certificate error: The certificate is not from a trusted certifying authority.

要继续建立RDP连接,用户必须单击"是"。为防止每次都出现RDP证书警告,我们可以选中"不再询问我与此计算机的连接"选项。

在这种情况下,RDP证书指纹与客户机上的RDP连接历史记录一起保存在注册表项的" CertHash"参数中(

HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\

)。如果我们隐藏了无法验证RDP服务器的警告,请从注册表中删除证书指纹以重置设置。

即使使用自签名证书来建立连接,RDP会话也是安全的,并且流量已加密。

在证书颁发机构(CA)中创建RDP证书模板

让我们尝试使用证书颁发机构颁发的受信任的SSL/TLS证书来保护RDP连接的安全。使用此证书,用户可以在连接时对RDP服务器进行身份验证。假设域中已经部署了Microsoft证书颁发机构。在这种情况下,我们可以配置自动颁发证书以及将证书连接到域中的所有Windows计算机和服务器。

我们必须在CA中为RDP/RDS主机创建一种新型的证书模板:

  • 运行证书颁发机构控制台,然后转到"证书模板"部分;
  • 复制计算机证书模板(证书模板->管理->计算机->复制);
  • 在"常规"标签中,指定新证书模板" RDPTemplate"的名称。确保"模板名称"字段中的值与"模板显示名称"相匹配;
  • 在"兼容性"标签中,指定域中使用的最低客户端版本(例如,CA的Windows Server 2008 R2和客户端的Windows 7)。因此,将使用更强大的加密算法。
  • 然后,在"扩展名"选项卡的"应用程序策略"部分中,将证书的使用范围限制为"仅远程桌面身份验证"(输入以下对象标识符" 1.3.6.1.4.1.311.54.1.2")。单击添加->新建,创建一个新策略并选择它;
  • 在证书模板设置(应用程序策略扩展)中,删除除"远程桌面身份验证"以外的所有策略;
  • 要在域控制器上使用此RDP证书模板,请打开"安全性"标签,添加"域控制器"组并为其启用"注册"和"自动注册"选项;
  • 保存证书模板;
  • 然后在证书颁发机构mmc管理单元中,单击证书模板文件夹,然后选择新建->要颁发的证书模板->选择已创建的模板(RDPTemplate`);

如何使用组策略部署RDP SSL/TLS证书?

现在,我们需要配置域GPO,以根据配置的模板自动将RDP证书分配给计算机/服务器。

假定所有域计算机都信任证书颁发机构,即已使用GPO将根证书添加到受信任的根证书颁发机构中。

  • 打开域组策略管理控制台(gpmc.msc),创建一个新的GPO对象,并将其链接到包含RDP/RDS服务器或者计算机的OU,以自动颁发TLS证书来保护RDP连接;
  • 转到以下GPO部分的"计算机配置->策略->管理模板-> Windows组件->远程桌面服务->远程桌面会话主机->安全"。启用"服务器身份验证证书模板"策略。指定我们先前创建的CA模板的名称(RDPTemplate);
  • 然后在同一GPO部分中,启用"要求对远程(RDP)连接使用特定安全层"策略,并为其设置值" SSL";
  • 要自动续订RDP证书,请转到GPO的"计算机配置"->" Windows设置"->"安全性设置"->"公钥策略"部分,然后启用"证书服务客户端自动注册属性"策略。检查"续订过期的证书,更新暂挂的证书并删除已吊销的证书"和"使用证书模板更新证书"选项;
  • 如果希望客户端始终验证RDP服务器证书,则必须配置"为客户端配置身份验证=如果身份验证失败会警告我"策略(计算机配置->策略->管理模板-> Windows组件->远程桌面设置- >远程桌面连接客户端);
  • 如果需要,请使用防火墙策略打开传入的RDP端口TCP/UDP 3389.
  • 然后在客户端计算机上更新组策略设置,启动计算机证书控制台(
Certlm.msc

),并确保CA颁发的远程桌面身份验证证书已出现在"个人"->"证书"部分中。

如果尚未应用新的组策略设置,请使用gpresult工具和本文进行诊断。

要应用新的RDP证书,请重新启动远程桌面服务:

Get-Service TermService -ComputerName mun-dc01| Restart-Service –force –verbose

之后,使用RDP连接到服务器时,我们将不会看到确认证书受信任的请求(要查看该请求,请使用其IP地址而不是FQDN将证书颁发给服务器,)。单击"查看"证书,转到"详细信息"选项卡,然后将值复制到"缩略图"字段中。

在证书颁发机构控制台的"已颁发证书"部分中,可以确保已为特定的Windows服务器/计算机颁发了RDPTemplate证书。还要检查证书的" Thumbprint"值:

然后,将此指纹与远程桌面服务使用的证书指纹进行比较。我们可以在注册表中查看RDS证书指纹的值(" HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations"," TemplateCertificate"参数)或者使用以下PowerShell命令:

Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices|select SSLCertificateSHA1Hash

然后,当连接到任何Windows主机的远程桌面时,我们将不会看到不可信RDP证书的警告。

使用受信任的TLS证书指纹签名RDP文件

如果没有CA,但是不希望用户在连接到RDP/RDS主机时看到警告,则可以将证书添加到用户计算机上的受信任证书中。

如上所述获取RDP证书指纹的值:

Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices|select SSLCertificateSHA1Hash

使用此指纹通过RDPSign.exe工具对.RDP文件进行签名:

rdpsign.exe /sha256 25A37B2946022CC12BAFF261234567DEB2ABC21 "C:\ps\mun-dc01.rdp"

然后使用GPO将此指纹添加到用户计算机上的受信任证书中。在"计算机配置"->"策略"->"管理模板"->" Windows组件"->"远程桌面设置"->"远程桌面连接客户端"中,指定代表受信任的.rdp发布者策略的证书的SHA1指纹中指定指纹(以分号分隔)。

要配置透明RDP登录而不输入密码(RDP单一登录),请配置"允许委派默认凭据"策略,并其中指定RDP/RDS主机名(有关如何操作,请参阅本文)。