Windows 2012 R2のRDSクラスターで証明書エラーがでる場合の対処法

Windows 2012 R2環境でRDSクラスターを作成する場合,証明書をインストールしなければ,リモートデスクトップ時に下図のような証明書エラーが出てしまいます。

The certificate is not from a trusted certifying authority.というエラーが出てしまう。

The certificate is not from a trusted certifying authority.というエラーが出てしまう。

そこで,証明書を発行し,通常の方法でServer Managerから証明書をインストールするものの,なぜか証明書エラーが解消しません。

Session Hostサーバーが複数台ある場合,一台だけは問題なく接続できるのに,もう一台に繋がる場合だけ証明書エラーが出るという事もあります。

そのようなときには,何らかの原因により,各Session Hostサーバーに対して,証明書が正しくインストールされていないということが考えられます。

ちなみに,各Session Hostサーバーに手動で証明書をインストールしてみても,問題は継続します。

証明書はWMIの設定に格納されている

実は,この証明書は,WMIのWin32_TSGeneralSettingという値に設定が格納されています。

では,Session Hostサーバーに証明書をインストールし,そのWMIの設定値を修正してみましょう。

RDPで使用される証明書を確認する

まずは,PowerShellを管理者で実行し,以下のコマンドを流します。

gwmi -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'"

出力された値の中から,CertificateNameを探してください。すると,空欄になっているか,クラスター名ではなく,Session Hostサーバーの名前が入っているかもしれません。その場合は修正が必要ですので,続く手順に進みます。

CertificateNameの値が空欄か,自分のサーバー名になってしまっている。

CertificateNameの値が空欄か,自分のサーバー名になってしまっている。

Session Hostサーバーにクラスター用の証明書をインストールする

証明書ファイルをSession Hostサーバー上にコピーし,ダブルクリックしてインストールします。

その後,以下のコマンドをPowerShellで流してください。

dir cert:\LocalMachine\My
クラスター用に発行した証明書のThumbprintの値をコピーする。

クラスター用に発行した証明書のThumbprintの値をコピーする。

すると,インストールされた証明書のThumbprintの値が表示されますので,それをコピーします。

RDSクラスター用の証明書をRDP接続で使用するように設定する

上記でコピーしたThumbprintの値を用いて,以下の2行をPowerShellで流します。

$path = (Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'").__path
Set-WmiInstance -Path $path -argument @{SSLCertificateSHA1Hash="コピーしたThumbprintの値"}

これで,RDP接続で用いられる証明書が,自己署名証明書ではなく,RDSクラスター用に発行した証明書に置き換わりました。

以下のコマンドを再度流すと,そのことを確認できます。

gwmi -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'"

この手順を,すべてのSession Hostサーバー上で行います。

これで,RDSクラスターに接続する際の証明書エラーを解消することができました。

ちなみに,証明書を作成する際には,SAN(Subject Alternate Name)に,すべてのSession Hostサーバーの名前とクラスター名などが含まれている必要があることにも注意です。

ご不明な点があれば,コメント欄でお知らせください。

コメント