web-dev-qa-db-ja.com

リモート管理モードでWindows Server 2012(以降)のRDPのカスタムSSL証明書を構成しますか?

したがって、Windows Server 2012のリリースでは、古いリモートデスクトップ関連の構成ユーティリティの多くが削除されています。特に、RDSHが使用するカスタム証明書を構成できるRDP-Tcpプロパティダイアログにアクセスできるようにするリモートデスクトップセッションホストの構成ユーティリティはもうありません。その代わりに、新しいサーバーマネージャーの「展開プロパティの編集」ワークフロー全体の一部である、素晴らしい新しい統合GUIがあります。問題は、リモートデスクトップサービスの役割がインストールされている場合にのみ、ワークフローにアクセスできることです(私が知る限り)。

これは、Microsoft側の見落としのようです。リモートデスクトップサービスの役割を不必要にインストールせずに、既定のリモート管理モードで実行しているWindows Server 2012でRDPのカスタムSSL証明書を構成するにはどうすればよいですか?

53
Ryan Bolger

RDSHの構成データの多くは、WMIのWin32_TSGeneralSettingクラスのroot\cimv2\TerminalServices名前空間に格納されていることがわかります。特定の接続用に構成された証明書は、SSLCertificateSHA1Hashというプロパティのその証明書のThumbprint値によって参照されます。


PDATE:これは、コンピューターの個人ストアにある最初のSSL証明書の拇印を取得して設定する一般的なPowershellソリューションです。システムに複数の証明書がある場合、gciコマンドに-Filterオプションを追加して、正しい証明書を参照していることを確認する必要があります。参考までに、元の回答はそのままにしておきます。

# 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. [拇印]フィールドまで下にスクロールし、スペースで区切られた16進文字列をメモ帳などにコピーします。
  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"}

注:証明書は、コンピューターアカウントの「個人用」証明書ストアにある必要があります。

81
Ryan Bolger

ライアンのソリューションを試すときに「無効なパラメーター」が表示される場合は、昇格したコマンドプロンプト(管理者として実行)を使用していることを確認してください。

4
David Literak

サーバーに有効なクライアント証明書の使用を強制する方法はありますか? RDPクライアントから、無効な証明書を無視するように選択できるようです。証明書が無効な場合にクライアントが接続できないようにしたい。

0
Progger

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
0