System Center 2012 R2 中的远程控制台

 

适用于: System Center 2012 R2 Virtual Machine Manager

远程控制台是 System Center 2012 R2 中引入的一项功能。 利用远程控制台,在其他远程工具(或远程桌面)不可用的情况下,租户可以访问其虚拟机的控制台。 当虚拟机在隔离的网络、不受信任的网络或 Internet 中时,租户可以使用远程控制台访问虚拟机。

远程控制台需满足以下条件才能运行:

  • Microsoft® Hyper-V® Server 2012 R2

  • System Center 2012 R2 Virtual Machine Manager

  • System Center 2012 R2 Service Provider Foundation

  • 适用于 Windows Server 的 Windows Azure 包

System_CAPS_ICON_note.jpg 说明

租户需要支持 Remote Desktop Protocol 8.1 的客户端计算机。 例如,运行 Windows 8 的用户必须升级到 Windows 8.1。 此外,使用 Windows 7 SP1 的客户端必须安装 KB2830477

在此版本中,远程控制台支持有限的功能。 不支持诸如剪贴板、声音、打印机重定向和驱动器映射等功能。 远程控制台的运行方式类似于物理计算机使用的键盘、视频和鼠标 (KVM) 连接。

用户身份验证

Windows Server 2012 R2 中的 Hyper-V 支持基于证书的身份验证,这用于确保租户只能访问分配给他们的虚拟机。适用于 Windows Server 的 Windows Azure 包 Web 门户、Service Provider Foundation 和 Virtual Machine Manager (VMM) 将进行身份验证、授予对虚拟机的访问权限,并提供令牌供 Hyper-V 主机用来授予对单一虚拟机的访问权限。

下图说明了租户在不受信任的网络(如 Internet)中访问虚拟机时访问远程控制台所需的组件。 如果在公司网络中部署了此环境,则忽略远程桌面网关(RD 网关)。

基于远程控制台证书的身份验证

证书的私钥和公钥用于建立信任关系。 以下部分描述了如何创建所需的证书。

创建用于远程访问的证书

证书用于在 RD 网关服务器、Hyper-V 主机和 VMM 之间建立信任关系。 证书允许 RD 网关和 Hyper-V 主机接受 VMM RD 网关颁发的声明令牌。 可以使用相同和不同的证书对 RD 网关和 Hyper-V 主机进行验证。 有效证书必须满足以下要求:

  1. 证书不能过期。

  2. “密钥用法”字段必须包含数字签名。

  3. “增强型密钥使用”字段必须包含以下客户端身份验证对象标识符:(1.3.6.1.5.5.7.3.2)

  4. 必须在受信任的根证书颁发机构证书存储中安装颁发证书的证书颁发机构 (CA) 的根证书。

  5. 证书的加密服务提供程序必须支持 SHA256。

你可以从商业证书颁发机构、从企业证书颁发机构或使用自签名证书获取有效证书。

System_CAPS_ICON_note.jpg 说明

你可以从商业证书颁发机构、从企业证书颁发机构或使用自签名证书获取有效证书。 使用自签名证书时,必须将证书公钥放在 RD 网关和 Hyper-V 主机内受信任的根证书颁发机构证书存储中。

使用 MakeCert 工具创建测试证书

为了进行测试,你可以使用 MakeCert 工具创建自签名证书。 MakeCert 是 Windows SDK 的一部分。

以下代码提供了关于如何创建自签名证书的示例:

makecert -n "CN=Remote Console Connect" -r -pe -a sha256 -e <mm/dd/yyyy> -len 2048 -sky signature -eku 1.3.6.1.5.5.7.3.2 -ss My -sy 24 "<CertificateName>.cer"  

其中:

-sky signature 用于签名
-r 创建自签名证书
-n “CN=Remote Console Connect” 使用者名称(远程控制台连接)
-pe 私钥可导出
-a sha256 算法
-len 2048 密钥长度
-e <mm/dd/yyyy> 到期日期
-eku 1.3.6.1.5.5.7.3.2 增强型密钥使用(客户端身份验证对象标识符)
-ss My 将私钥存储在证书存储 My 中
-sy 24 加密提供程序类型(支持 SHA256)
“<CertificateName>.cer” 公钥的名称

使用证书颁发机构

从证书颁发机构请求证书时,可以将类似于以下项的证书模板 .inf 文件用于 Certreq 工具。 有关详情,请参阅 Certreq

[Version]  
Signature="$Windows NT$"  
[NewRequest]  
; Change to your,country code, company name and common name  
Subject = "C=US, O=Contoso, CN=wap-rdg.contoso.com"  
; Indicates both encryption and signing  
KeySpec = 1   
; Length of the public and private key, use 2048 or higher  
KeyLength = 2048  
; Certificate will be put into the local computer store  
MachineKeySet = TRUE   
PrivateKeyArchive = FALSE  
RequestType = PKCS10  
UserProtected = FALSE  
; Allow the key to be shared between multiple computers  
Exportable = TRUE  
SMIME = False  
UseExistingKeySet = FALSE   
; ProviderName and ProviderType must be for a CSP that supports SHA256  
ProviderName = "Microsoft Enhanced RSA and AES Cryptographic Provider"  
ProviderType = 24  
; KeyUsage must include DigitalSignature. 0xA0 also includes Key Encipherment  
KeyUsage = 0xa0  
[EnhancedKeyUsageExtension]  
OID=1.3.6.1.5.5.7.3.2  
  

通过运行以下 Windows PowerShell 脚本,你可以验证 .pfx 文件中的证书是否满足算法和增强型密钥使用的要求:

$cert = Get-PfxCertificate <cert.pfx>  
if ($cert.PrivateKey.CspKeyContainerInfo.ProviderName -ne "Microsoft Enhanced RSA and AES Cryptographic Provider")  
{  
       Write-Warning "CSP may not support SHA256"  
}  
if (! (Test-Certificate $cert -EKU "1.3.6.1.5.5.7.3.2") )  
{  
       Write-Warning "Certificate is not valid"  
}  
  

安装证书

在创建证书后,你必须安装证书,并配置 Virtual Machine Manager 以使用该证书来颁发声明令牌。 然后,证书的私钥将导入 Virtual Machine Manager 数据库。 为此,请使用 Set-SCVMMServer Windows PowerShell cmdlet,例如:

PS C:\> $mypwd = ConvertTo-SecureString "password" -AsPlainText -Force  
PS C:\> $cert = Get-ChildItem .\RemoteConsoleConnect.pfx   
PS C:\> $VMMServer = VMMServer01.Contoso.com  
PS C:\> Set-SCVMMServer -VMConnectGatewayCertificatePassword $mypwd -VMConnectGatewayCertificatePath $cert -VMConnectHostIdentificationMode FQDN -VMConnectHyperVCertificatePassword $mypwd -VMConnectHyperVCertificatePath $cert -VMConnectTimeToLiveInMinutes 2 -VMMServer $VMMServer  
  

在此示例中,同一证书用于 RD 网关和 Hyper-V 主机,令牌的生存期为两分钟。 可以选择介于 1 到 60 分钟之间的令牌生存期。

你可通过其完全限定域名 (FQDN) 来确定主机服务器。 或者,可以根据 IPv4 地址、IPv6 地址和主机名标识主机。 主机标识包含在发送至租户的远程桌面协议 (RDP) 文件中。

System_CAPS_ICON_note.jpg 说明

VMMServer01.Contoso.com 用作主机服务器名称示例。 请将其更改为你的实际服务器名称。

‎%%78%%% ‎

在 Virtual Machine Manager 中刷新每个主机时,它会在 Hyper-V 主机的个人证书存储中安装证书,并将 Hyper-V 主机配置为使用证书验证令牌。 你可以使用以下 Windows PowerShell 命令强制刷新所有 Hyper-V 主机:

PS C:\> Get-SCVMHost -VMMServer "VMMServer01.Contoso.com" | Read-SCVMHost  

Hyper-V 主机

验证令牌时,Hyper-V 仅接受使用特定证书和哈希算法签名的令牌。 Virtual Machine Manager 执行 Hyper-V 主机所需的配置。 仅 Windows Server 2012 R2 中的 Hyper-V 支持远程控制台功能。

使用自签名证书时,必须将证书公钥导入到 Hyper-V 主机的受信任的根证书颁发机构证书存储。 以下脚本提供了如何使用 Windows PowerShell 导入公钥的示例:

PS C:\> Import-Certificate -CertStoreLocation cert:\LocalMachine\Root -Filepath "<certificate path>.cer"  

如果在配置 Virtual Machine Manager 之后安装了证书,则必须重启 Hyper-V 虚拟机管理服务。

你可以按照如下方式验证是否为远程控制台正确配置了 Hyper-V 主机:

  1. 检查证书是否在 Hyper-V 主机的个人证书存储中,并且证书是否为受信任的证书。

  2. 检查受信任的颁发者证书的哈希配置。

以下脚本提供了如何使用 Windows PowerShell 检查 Hyper-V 主机的个人证书存储中是否安装了证书的示例:

PS C:\> dir cert:\localmachine\My\ | Where-Object { $_.subject -eq "CN=Remote Console Connect" }  

以下脚本提供了如何使用 Windows PowerShell 检查受信任颁发者证书的哈希配置的示例:

PS C:\> $TSData = Get-WmiObject -computername $Server -NameSpace "root\virtualization\v2" -Class "Msvm_TerminalServiceSettingData"  

TrustedIssuerCertificateHashes 阵列必须包含用于连接远程控制台的证书指纹。AllowedHashAlgorithms 阵列必须为空,或者包含 SHA256 算法。 如果阵列为空,则它将默认为 SHA256 或 SHA512。

System_CAPS_ICON_note.jpg 说明

Virtual Machine Manager 将生成 SHA256 令牌。

远程桌面网关

远程桌面网关(RD 网关)只能用于通过控制台访问虚拟机。 配置 RD 网关时,将发生配置更改,这会使网关无法用于其他目的。 配置 RD 网关时将完成以下任务:

  1. 部署 RD 网关并安装身份验证插件。

  2. 安装该证书。

  3. (通过使用 WMI)配置受信任的颁发者证书。

  4. 为 RD 网关创建证书。

要支持联合身份验证,必须在 RD 网关服务器上安装 Microsoft System Center Virtual Machine Manager 控制台连接网关。 首先创建虚拟机,然后启用远程桌面服务。

然后,安装 System Center Virtual Machine Manager 控制台连接网关组件。 你将在以下 Virtual Machine Manager 安装媒体文件夹中找到此组件的安装二进制文件。CDLayout.EVAL\amd64\Setup\msi\RDGatewayFedAuth。 对于高可用性配置,请将多个数量的 RD 网关与控制台连接网关组件一起安装在负载平衡器后面。

然后,将证书的公钥导入到每个 RD 网关服务器上的个人证书存储。 你可以使用 Windows PowerShell 完成此操作,如以下示例中所示:

PS C:\> Import-Certificate -CertStoreLocation cert:\LocalMachine\My -Filepath "<certificate path>.cer"  

如果你使用的是自签名证书,则必须将证书公钥导入到计算机帐户的受信任的根证书颁发机构证书存储。 你可以使用 Windows PowerShell 完成此操作,如以下示例中所示:

PS C:\> Import-Certificate -CertStoreLocation cert:\LocalMachine\Root -Filepath "<certificate path>.cer"  

验证令牌时,RD 网关仅接受使用特定证书和哈希算法签名的令牌。 此配置通过在 WMI FedAuthSettings 类中设置 TrustedIssuerCertificateHashesAllowedHashAlgorithms 属性来执行。 必须具有管理凭据才能设置这些属性。

TrustedIssuerCertificateHashes 属性是存储在 RD 网关服务器中的证书指纹阵列。 你可以使用以下 Windows PowerShell 命令设置 TrustedIssuerCertificateHashes 属性:

$Server = "rdgw.contoso.com"  
$Thumbprint = "95442A6B58EB5E443313C1B4AFD2665991D354CA"  
$TSData = Get-WmiObject -computername $Server -NameSpace "root\TSGatewayFedAuth2" -Class "FedAuthSettings"  
$TSData.TrustedIssuerCertificates = $Thumbprint  
$TSData.Put()  

最后一步是为 RD 网关选择或创建自签名证书。 要完成此操作,请打开 RD 网关管理器,右键单击“远程桌面网关”,然后单击“属性”。 在“属性”对话框中,单击“SSL 证书”选项卡。

租户客户端计算机使用此证书来验证 RD 网关服务器的标识。 证书的 CN 名称必须与 RD 网关服务器的 FQDN 匹配。 打开 RD 网关管理器,分配或创建一个自签名证书。

System_CAPS_ICON_note.jpg 说明

自签名证书仅用于测试。 在生产部署中决不应该使用自签名证书。 如果要使用自签名证书,还需要在通过 RD 网关进行连接的每个租户计算机上安装该证书。

你可以通过执行以下步骤来验证 RD 网关的配置:

  1. 确保将 RD 网关配置为使用控制台连接网关进行身份验证和授权。 你可以使用 Windows PowerShell 完成此操作,如以下示例中所示:

    PS C:\> Get-WmiObject -Namespace root\CIMV2\TerminalServices -Class Win32_TSGatewayServerSettings  
    

    验证“AuthenticationPlugin”和“AuthorizationPlugin”属性是否设置为“FedAuthorizationPlugin”。

  2. 确保在计算机帐户的个人证书存储中已安装证书。 你可以使用 Windows PowerShell 完成此操作,如以下示例中所示:

    PS C:\> dir cert:\localmachine\My\ | Where-Object { $_.subject -eq "CN=Remote Console Connect" }  
    
  3. 检查控制台连接网关的配置。 你可以使用 Windows PowerShell 完成此操作,如以下示例中所示:

    PS C:\> Get-WmiObject -computername $Server -NameSpace "root\TSGatewayFedAuth2" -Class "FedAuthSettings"  
    

    TrustedIssuerCertificates 阵列必须包含控制台连接网关的证书指纹。

适用于 Windows Server 的 Windows Azure 包的远程控制台

你可以通过适用于 Windows Server 的 Windows Azure 包中的虚拟机云服务按计划启用远程控制台访问权限。 在计划仪表板中,在计划服务下面选择“虚拟机云”,并在其他设置下面选择“连接至虚拟机控制台”。

如果你已安装远程桌面网关,请阅读如何配置 Windows Azure 包以使用远程桌面网关过程。

安全建议

我们建议你执行以下任务来提高安全性:

Name 威胁 建议
访问令牌 我的证书存储访问权限可用于为任何虚拟机生成访问令牌。 使用 Active Directory 安全组限制对生成令牌的 Virtual Machine Manager 服务器的访问权限。
令牌生存期 远程桌面协议 (RDP) 文件包含 EndpointFedAuth 令牌,如果拥有 RDP 文件,则可以访问特定虚拟机的控制台。 配置短令牌过期时间。 推荐的过期时间是一分钟。 使用 SetSCVMMServer Windows PowerShell cmdlet 设置令牌生存期。
共享的访问 另一个用户请求并访问控制台会话,这将终止现有会话。 这包括主机,该主机将访问登录用户的控制台,然后获取对租户资源的访问权限。

控制台会话类似于物理主机的 KVM 会话。 虚拟机会话可供在授权策略中被授予控制台读取或控制台读取/写入操作权限的所有用户使用。 默认情况下,此权限已授予任何管理员。
租户用户:

当前不工作时不要保持登录到控制台会话状态。

确保在短暂的非活动期后锁定操作系统。

主机托管服务提供商:

使用授权策略限制读写访问权限。
恶意用户 恶意用户在未获得授权时可能会尝试通过 RD 网关连接至端口。 例如,恶意用户可能会尝试连接到 Hyper-V 主机上的 RDP 端口,以尝试用户名和密码组合。 将 RD 网关服务器中的远程桌面资源授权策略配置为阻止用户直接连接至 Hyper-V 服务器上的端口 3389。 仅端口 2179 需要连接。 有关详细信息,请参阅管理远程桌面资源分配策略
中间人攻击 Hyper-V 旨在解决的一个安全问题是更好地防御“中间人”(也称为 MITM)攻击。 使用受信任的证书标识 Hyper-V 主机可帮助防御 MITM 攻击。 Hyper-V 使用单端口侦听程序,以利用受信任的证书进行服务器验证。 在某些情况下,Hyper-V 会颁发自签名证书,然后将其用于服务器验证。 作为此方法的一种替代方法,你可以将 Hyper-V 配置为使用不同的证书,如证书颁发机构 (CA) 颁发的证书。 将 Hyper-V 主机证书与连接至受信任的根证书的有效证书链配合使用。 这可以阻止一条表明无法确认远程计算机标识的错误消息。 有关详情,请参阅 Configuring Certificates for Virtual Machine Connection(配置虚拟机连接证书)
会话搜寻 当控制台连接处于活动状态时,可以让主机员工拍摄虚拟机快照并将虚拟机导出到另一台服务器,或者收集控制台的缩略图图像。 使用授权策略限制读写访问权限。 将员工可以访问控制台会话这种情况告诉租户。
网络配置 恶意用户可以使用 RDP 文件中的属性深入了解网络配置。 确定是应该使用主机名还是使用 IP 地址连接到运行 Hyper-V 的服务器。 此信息包括在发送到服务使用者的 RDP 文件中。 此信息也包含在启用控制台连接时运行 Hyper-V 的服务器所提供的证书中。

设置网络配置,以确保无法从 Internet 或用户虚拟机中直接访问运行 Hyper-V 的服务器。 IP 地址(特别是 IPv6 地址)会减少泄露的信息量。

请参阅

如何配置 Windows Azure 包以使用远程桌面网关