Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

信頼できるSSL/TLS証明書でRDP接続を保護する方法

本記事では、Active Directoryドメイン内のWindowsコンピューターやサーバーへのRDP接続を、信頼できるSSL/TLS証明書を使って保護する方法を解説します。デフォルトの自己署名RDP証明書の代わりに信頼された証明書を使用することで、接続時に表示される証明書警告を回避できます。ここでは、証明機関(CA)でカスタムRDP証明書テンプレートを作成し、グループポリシー(GPO)を使ってリモートデスクトップサービスにSSL/TLS証明書を自動的に発行・バインドする手順を紹介します。

リモートデスクトップ接続(RDP)の自己署名証明書による警告

デフォルトでは、WindowsはRDPセッションを保護するために自己署名証明書を生成します。mstsc.exeクライアントで初めてRDP/RDSホストに接続すると、次のような警告が表示されます。

リモート コンピューターは、セキュリティ証明書に問題があるため認証できませんでした。続行しても安全でない可能性があります。
証明書エラー: 証明書が信頼された証明機関から発行されていません。

接続を確立するには「はい」をクリックする必要があります。毎回警告が表示されるのを防ぎたい場合は、「このコンピューターへの接続について再度確認しない」オプションにチェックを入れてください。

この場合、RDP証明書のサムプリントは、クライアント側のRDP接続履歴を保存するレジストリキー(HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\)の CertHash パラメーターに記録されます。RDPサーバーの検証に関する警告を非表示にした場合は、設定をリセットするためにレジストリから該当する証明書サムプリントを削除してください。

なお、自己署名証明書を使って接続した場合でも、RDPセッション自体は安全であり、通信トラフィックは暗号化されています。

証明機関(CA)でRDP証明書テンプレートを作成する

次に、企業の証明機関が発行した信頼できるSSL/TLS証明書を使ってRDP接続を保護する方法を見ていきましょう。この証明書があれば、ユーザーは接続時にRDPサーバーを正しく認証できます。ドメインにMicrosoft証明機関がすでに展開されていることを前提とし、ドメイン内のすべてのWindowsコンピューターおよびサーバーへの証明書の自動発行と適用を構成します。

まず、CAでRDP/RDSホスト用の新しい証明書テンプレートを作成します。

  1. 証明機関コンソールを起動し、「証明書テンプレート」セクションに移動します。
  2. 「Computer」証明書テンプレートを複製します(証明書テンプレート → 管理 → Computer → 複製)。
  3. 全般」タブで、新しいテンプレート名として RDPTemplate を指定します。「テンプレート名」と「テンプレート表示名」が一致していることを確認してください。
  4. 互換性」タブで、ドメイン内で使用している最小クライアントバージョンを指定します(例:CAにWindows Server 2008 R2、クライアントにWindows 7)。これにより、より強力な暗号化アルゴリズムが使用されるようになります。
  5. 拡張機能」タブのアプリケーションポリシーセクションで、証明書の用途を「リモート デスクトップ認証」のみに制限します。オブジェクト識別子として 1.3.6.1.4.1.311.54.1.2 を入力し、「追加 → 新規」をクリックして新しいポリシーを作成・選択します。
  6. 証明書テンプレートの設定(アプリケーション ポリシー拡張機能)で、「リモート デスクトップ認証」以外のすべてのポリシーを削除します。
  7. このRDP証明書テンプレートをドメインコントローラーでも利用できるようにするには、「セキュリティ」タブを開き、「Domain Controllers」グループを追加して「登録」と「自動登録」の両方のオプションを有効にします。
  8. 証明書テンプレートを保存します。
  9. 最後に、証明機関MMCスナップインで「証明書テンプレート」フォルダーをクリックし、「新規 → 発行する証明書テンプレート」を選択して、作成したテンプレート(RDPTemplate)を指定します。

グループポリシーを使ったRDP SSL/TLS証明書の展開方法

続いて、作成したテンプレートに基づいて、コンピューターやサーバーへRDP証明書を自動的に割り当てるドメインGPOを構成します。

前提条件として、すべてのドメインコンピューターが企業の証明機関を信頼している必要があります。つまり、GPOを使ってルート証明書が「信頼されたルート証明機関」ストアに追加済みであることが求められます。

  1. ドメイングループポリシー管理コンソール(gpmc.msc)を開き、新しいGPOオブジェクトを作成して、RDP/RDSサーバーや対象コンピューターを含むOUにリンクします。これにより、RDP接続を保護するためのTLS証明書が自動的に発行されます。
  2. GPOの次のセクションに移動します:「コンピューターの構成 → ポリシー → 管理用テンプレート → Windowsコンポーネント → リモートデスクトップサービス → リモートデスクトップセッションホスト → セキュリティ」。「サーバー認証証明書テンプレート」ポリシーを有効にし、先ほど作成したCAテンプレート名(RDPTemplate)を指定します。
  3. 同じGPOセクションで、「リモート (RDP) 接続に特定のセキュリティ レイヤーの使用を要求する」ポリシーを有効にし、値を「SSL」に設定します。
  4. RDP証明書を自動更新するには、GPOの「コンピューターの構成 → Windowsの設定 → セキュリティの設定 → 公開キーポリシー」セクションに移動し、「証明書サービス クライアント – 自動登録のプロパティ」ポリシーを有効にします。「期限切れの証明書を更新し、保留中の証明書を更新し、失効した証明書を削除する」と「証明書テンプレートを使う証明書を更新する」の両方のオプションにチェックを入れます。
  5. クライアントに常にRDPサーバー証明書を検証させたい場合は、「サーバー認証に失敗したら警告する」ポリシーを構成します(コンピューターの構成 → ポリシー → 管理用テンプレート → Windowsコンポーネント → リモートデスクトップ接続クライアント)。
  6. 必要に応じて、ファイアウォールポリシーで着信RDPポートTCP/UDP 3389を開放します。
  7. クライアントコンピューターでグループポリシー設定を更新した後、コンピューター証明書コンソール(certlm.msc)を起動し、CAが発行したリモートデスクトップ認証証明書が「個人 → 証明書」セクションに表示されていることを確認します。

新しいグループポリシー設定が適用されていない場合は、gpresultツールなどを活用して診断を行ってください。

新しいRDP証明書を適用するには、リモートデスクトップサービスを再起動します。

Get-Service TermService -ComputerName mun-dc01 | Restart-Service -Force -Verbose

再起動後、RDPでサーバーに接続しても、証明書の信頼性を確認する警告は表示されなくなります(警告を確認したい場合は、FQDNではなくIPアドレスを使って、証明書が発行されたサーバーに接続してください)。「証明書の表示」をクリックし、「詳細」タブに移動して「拇印(Thumbprint)」フィールドの値をコピーしておきます。

証明機関コンソールの「発行された証明書」セクションで、対象のWindowsサーバー/コンピューターに対してRDPTemplate証明書が発行されていることを確認できます。あわせて証明書の拇印の値も確認しましょう。

次に、この拇印と、リモートデスクトップサービスが実際に使用している証明書の拇印を比較します。RDS証明書の拇印は、レジストリ(HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStationsTemplateCertificate パラメーター)または以下のPowerShellコマンドで確認できます。

Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices | Select SSLCertificateSHA1Hash

これ以降、任意のWindowsホストのリモートデスクトップに接続しても、信頼されていないRDP証明書に関する警告は表示されなくなります。

信頼できるTLS証明書の拇印でRDPファイルに署名する

CAを運用していない環境でも、ユーザーにRDP/RDSホスト接続時の警告を表示させたくない場合は、ユーザーのコンピューター上で証明書を信頼されたものとして登録する方法があります。

まず、前述の方法でRDP証明書の拇印の値を取得します。

Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices | Select SSLCertificateSHA1Hash

取得したフィンガープリントを使い、RDPSign.exeツールで.RDPファイルに署名します。

rdpsign.exe /sha256 25A27B2947022CC11BAFF261234567DEB2ABC21 "C:\ps\mun-dc01.rdp"

次に、GPOを使ってこの拇印をユーザーコンピューターの信頼された証明書として追加します。「信頼された .rdp 発行者を表す証明書の SHA1 拇印を指定する」ポリシー(コンピューターの構成 → ポリシー → 管理用テンプレート → Windowsコンポーネント → リモートデスクトップ接続クライアント)で、拇印をセミコロン区切りで指定してください。

また、パスワード入力なしの透過的なRDPログオン(RDPシングルサインオン)を実現したい場合は、「資格情報の委任の既定を許可する」ポリシーを構成し、そこにRDP/RDSホスト名を指定します。

  1. OpenSSLでSSL証明書を生成する方法!Linuxでの手順を徹底解説

    SSL/TLS証明書の生成は、多くのLinuxシステム管理者にとって日常的なタスクの一つです。幸い、管理者でなくても、オープンソースツール「OpenSSL」を使えば誰でも簡単に証明書を作成できます。OpenSSLは多くのLinuxディストリビューションにデフォルトで搭載されています。この記事では、OpenSSLとは何か、そのインストール方法、そして最も重要な、システム上でSSL/TLS証明書を生成する具体的な手順を詳しく解説します。 OpenSSLとは? OpenSSLは、ネットワーク通信を暗号化するためのオープンソースのSSL/TLS実装を提供するために、OpenSSL Projectが

  2. 無料SSL証明書と商用SSL証明書、どちらを選ぶべき?徹底比較ガイド

    Web全体で暗号化技術の利用が急速に広がったことで、人々は「暗号化=信頼できるサイト」というイメージを持つようになりました。この流れは雪だるま式に拡大し、SSL/TLS暗号化を導入しないサイトは取り残されるという意識を多くのWebサイト運営者に与えることになりました。特にECサイトは、顧客が暗号化されていない環境でのオンライン取引に強い不安を抱くため、いち早くその圧力を感じた存在でした。個人や企業が所有するWebサイトにとって、暗号化は単なるセキュリティのためのアルゴリズム以上の意味を持ちます。認証局(CA)の存在や認証レベルの違いなど、より複雑な要素が絡んでくるのです。そして、Lets En