在远程管理模式下为 Windows Server 2012(及更高版本)上的 RDP 配置自定义 SSL 证书?

Rya*_*ger 59 ssl rdp remote-desktop-services windows-server-2012 windows-server-2016

所以 Windows Server 2012 的发布删除了很多旧的远程桌面相关的配置实用程序。特别是,没有更多的远程桌面会话主机配置实用程序可以让您访问 RDP-Tcp 属性对话框,让您配置自定义证书以供 RDSH 使用。取而代之的是一个不错的新统一 GUI,它是新服务器管理器中整体“编辑部署属性”工作流的一部分。问题是,如果您安装了远程桌面服务角色(据我所知),您只能访问该工作流。

这对微软来说似乎有点疏忽。当 Windows Server 2012 在默认远程管理模式下运行时,我们如何为 RDP 配置自定义 SSL 证书,而无需不必要地安装远程桌面服务角色?

Rya*_*ger 86

事实证明,RDSH 的大部分配置数据都存储在命名空间Win32_TSGeneralSetting中 WMI 中的类中root\cimv2\TerminalServices。为给定连接配置的证书由名为 的属性上的该证书的 Thumbprint 值引用SSLCertificateSHA1Hash


更新:这是一个通用的 Powershell 解决方案,它可以抓取并设置计算机个人存储中第一个 SSL 证书的指纹。如果您的系统有多个证书,您应该-Filtergci命令中添加一个选项以确保您引用正确的证书。我将我的原始答案完整保留在此下方以供参考。

# get a reference to the config instance
$tsgs = gwmi -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'"

# grab the thumbprint of the first SSL cert in the computer store
$thumb = (gci -path cert:/LocalMachine/My | select -first 1).Thumbprint

# set the new thumbprint value
swmi -path $tsgs.__path -argument @{SSLCertificateSHA1Hash="$thumb"}
Run Code Online (Sandbox Code Playgroud)

为了获得指纹值

  1. 打开证书的属性对话框并选择详细信息选项卡
  2. 向下滚动到 Thumbprint 字段并将空格分隔的十六进制字符串复制到记事本之类的东西中
  3. 从字符串中删除所有空格。您还需要注意并删除有时会在字符串中第一个字符之前复制的非 ascii 字符。它在记事本中不可见。
  4. 这是您需要在 WMI 中设置的值。它应该看起来像这样:1ea1fd5b25b8c327be2c4e4852263efdb4d16af4

现在您有了指纹值,这里有一个单行代码,您可以使用 wmic 设置该值:

wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="THUMBPRINT"
Run Code Online (Sandbox Code Playgroud)

或者,如果 PowerShell 是你的东西,你可以使用它来代替:

$path = (Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'").__path
Set-WmiInstance -Path $path -argument @{SSLCertificateSHA1Hash="THUMBPRINT"}
Run Code Online (Sandbox Code Playgroud)

注意:证书必须位于计算机帐户的“个人”证书存储中。

  • 只是想补充一点,这使我免于纯粹的崩溃。谢谢你。按照technet 等中的建议安装角色和重新启动服务器是荒谬的。即使这样,一旦您在 RD 网关管理器中安装了 SSL 证书,它也不会转移到远程管理员登录。 (3认同)
  • 非常感谢。在我找到这个之前,我一定已经搜索了**所有的谷歌**。有太多结果告诉我通过“添加角色和功能”安装“远程桌面服务”,但这样做需要您加入域。 (2认同)
  • 如果我尝试使用您的 PS 脚本执行此操作,则会收到“无效参数”。如果我手动执行同样的问题,也是...... (2认同)
  • 我又来了 :D 在运行 `wmic` 时,我在 Powershell 中也遇到了“无效参数”错误。刚刚看到底部的注释。** 确保证书也在个人商店中。** 这次我在虚拟主机商店中... (2认同)

小智 5

如果您在尝试 Ryan 的解决方案时收到“无效参数”,请确保您使用的是提升的命令提示符(以管理员身份运行)。