在远程管理模式下为Windows Server 2012上的RDP配置自定义SSL证书?


52

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

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


Answers:


80

事实证明,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"}

为了获得指纹值

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

现在您有了指纹值,这是一个可用于使用wmic设置值的单线:

wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="THUMBPRINT"

或者,如果您使用的是PowerShell,则可以改用以下命令:

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

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


3
只是想补充一点,这使我摆脱了纯粹的崩溃。谢谢。按照technet之类的建议安装角色并重新启动服务器是荒谬的。即使这样,一旦您在RD网关管理器中安装了SSL证书,它也不会继承到远程管理员登录名。
爸爸

2
非常感谢。找到这个之前,我必须已经搜索了整个Google。太多的结果告诉我要通过“添加角色和功能”安装“远程桌面服务”,但是这样做需要您加入域。
Sethi 2014年

2
如果尝试使用您的PS脚本执行此操作,则会收到“无效参数”。如果我也手动执行同样的问题...
deed02392 '16

1
在重新导入包括私钥的证书之前,我已经使用所有方法获取了无效参数。简单的错误。
toffitomek

2
再次我:D我也在运行时在Powershell中也收到“无效参数”错误wmic。刚看到底部的字条。确保证书也位于个人存储中。我这次是在Web Hosting商店中……
Sethi


0

您需要domain.pfx txt文件中的指纹SSLCertificateSHA1Hash.txt

然后在CMD中运行此命令:

pushd %~dp0
cls
::FreeSoftwareServers.com

certutil.exe -p "" -importpfx "%~dp0domain.pfx"
set /p FingerPrint=<"%~dp0SSLCertificateSHA1Hash.txt"
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="%FingerPrint%"
icacls.exe "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\*" /grant "NETWORK SERVICE":R
shutdown /r /t 5
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.