連載
» 2013年12月16日 05時00分 UPDATE

Tech TIPS:Windowsでリモートデスクトップ接続のサーバに「正しい」証明書を割り当てる

リモートデスクトップで接続しようとすると、リモートコンピュータのIDを識別できない、という警告がクライアント側に表示されることがある。これはデフォルトでサーバの認証に自己発行の証明書が使われているからだ。正規の証明書を割り当てる方法を説明する。

[島田広道,デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows 7 / Windows 8 / Windows 8.1 / Windows Server 2008 R2/ Windows Server 2012 / Windows Server 2012 R2



解説

 リモートデスクトップ接続でリモートのWindowsコンピュータに接続しようとすると、ローカルコンピュータに「このリモート コンピューターの ID を識別できません。接続しますか?」という警告メッセージが表示されることがある。

リモートデスクトップ接続時によく表示される警告ダイアログ リモートデスクトップ接続時によく表示される警告ダイアログ
リモートデスクトップでリモートコンピュータに接続する際、このような警告ダイアログがローカルコンピュータ(接続元)に表示されることがある。
  (1)接続先のリモートコンピュータの証明書に何らかの問題があったため、認証に失敗した(つまりIDを識別できなかった)ことを表している。
  (2)具体的な理由として、「この証明書は信頼された認証機関のものではありません。」と表示される。
  (3)これにチェックを入れてオンにすれば、この警告は表示されなくなるが、あくまでも警告を消しただけでその原因は解消されていない(詳細は後述)。

 ここで[はい]ボタンを押せば接続できるものの、[このコンピューターへの接続について今後確認しない]チェックボックスをオンにしない限り、接続するたびにこの警告が表示される。いったい何が原因でこのようなメッセージが表示されるのだろうか?

●サーバの認証に自己発行証明書が用いられているのが原因

 リモートデスクトップ接続では、クライアント(ローカルコンピュータ)がサーバ(リモートコンピュータ)を認証するのに証明書が用いられる。簡単に説明すると、クライアント側は接続時にサーバが提示する証明書の「サブジェクト」と呼ばれる項目を調べ、それがクライアント側で指定した接続先のコンピュータ名と一致しているかどうか確認する。一致していて、かつ証明書が信頼に足るものであれば、クライアントは「正しい」サーバだと判断して接続を確立しようとする。逆に不一致だったり、証明書が信頼できなかったりすると「正しくない」サーバかもしれないとされ、警告メッセージがクライアント側に表示される。

 上記の警告が表示されるのは、デフォルトでサーバの証明書が自己発行であることが原因だ(自己発行証明書についてはTIPS「Webサイトのデジタル証明書を確認する」参照)。サーバ側でリモートデスクトップ接続を有効にすると専用の自己発行証明書が作成され、リモートデスクトップ接続時の認証に用いられるように自動で設定される。この仕組みにより、認証局からサーバの証明書を発行しなくても、警告を無視すれば「取りあえず」リモートデスクトップ接続が利用できるので手軽だ。

 その半面、警告を無視することはサーバの認証をしていないも同然で、不正なサーバによるなりすましを防止できないといった危険がある。例えるなら、HTTPSでWebサイトに接続したときにしばしば表示されるSSL証明書の警告・エラーを無視して接続を強行するのと似たようなものだ。特に、インターネットを介してサーバと接続する環境では避けたい状況だ。

 この問題を根本的に解決するには、信頼されている認証局から発行された正しい証明書をリモートデスクトップ接続のサーバに割り当てる設定をすることだ。本稿では、その割り当て方法を説明する。

●リモートデスクトップ接続に利用できる「正しい」証明書の条件

 リモートデスクトップ接続のサーバ認証に使える証明書には幾つかの条件が必要だ。「操作方法」の設定を始める前に、まず以下の手順で利用可能な証明書があるかどうか確認しておく。

 コンピュータに格納されている証明書を表示するには、サーバ側のWindowsに管理者アカウントでログオンし、[ファイル名を指定して実行]で「mmc.exe」を起動する。次に[ファイル]−[スナップインの追加と削除]を実行して証明書スナップインを組み込む。その際、管理対象の証明書は[コンピューター アカウント]、管理対象のコンピュータは「ローカル コンピューター」をそれぞれ選ぶ。Windows 8/Server 2012以降なら[ファイル名を指定して実行]で「certlm.msc」を実行してもよい。

 証明書スナップインの画面が表示されたら左ペインのツリーから[個人]−[証明書]を選び、真ん中のペインに表示された証明書から1つ選んでプロパティを開く。そこで、次のように各プロパティを確認する。

  • [全般]タブ
  • [この証明書の目的:]に「リモート コンピューターの ID を保証する」と表示されること
  • [有効期間]の期間内であること
  • 「この証明書に対する秘密キーを持っています。」と表示されること
  • [詳細]タブ
  • リモートデスクトップ接続時にクライアント側から指定されるリモートコンピュータ名が、[サブジェクト]の「CN=〜」(共通名)または[サブジェクトの別名]の「DNS Name=〜」に含まれること。ただしドメインサフィックスまで含めて完全に一致している必要がある。共通名については(*.example.jpのような)ワイルドカードでもよい
  • [拡張キー使用法]に「サーバー認証 (1.3.6.1.5.5.7.3.1)」が含まれること
  • [証明のパス]タブ
  • 「証明のパス」のツリーに表示される各証明書をそれぞれダブルクリックし、表示されるプロパティの「証明のパス」タブ−「証明書の状態」に「この証明書は問題ありません」と表示されること(TIPS「Webサイトのデジタル証明書を確認する」の画面「正しいデジタル証明書における『証明のパス』の例」が参考になる)。

 全て満たす証明書が見つかったら、以下の「操作方法」の手順でリモートデスクトップ接続に割り当てるので、ほかの証明書と区別できるようにメモしておく。

 上記の条件を満たす証明書を取得する方法については、別途解説したい。ただ、ほとんどの場合、上記の条件はWebサーバ向けのSSL証明書でも満たせる。その点では次の記事で説明している証明書の発行・取得の手順が参考になるだろう。

操作方法

 リモートデスクトップ接続のサーバに証明書を割り当てるには、幾つかの方法がある。Windows OSの種類によっては利用できない方法もあるので、それぞれ解説しよう。

●GUIの管理ツールで証明書を割り当てる方法

 この方法では特定の証明書をリモートデスクトップ接続に割り当てられる。しかし、利用できるのはWindows Server 2008 R2だけで、WindowsクライアントやWindows Server 2012/2012 R2では利用できないので注意してほしい。

 設定するには、まずサーバのWindows OSに管理者アカウントでログオンしてから、管理ツールの[リモート デスクトップ サービス]−[リモート デスクトップ セッション ホストの構成]を起動する。次に左ペインのツリーから[RD セッション ホストの構成: <サーバ名>]を選び、真ん中のペインの「接続」にある[RDP-Tcp]をダブルクリックしてプロパティを開く。その[全般]タブの「証明書:」にある[選択]ボタンをクリックする。

RDP-Tcpのプロパティ画面 RDP-Tcpのプロパティ画面
これは管理ツールの[リモート デスクトップ サービス]にある[リモート デスクトップ セッション ホストの構成]ツールでRDP-Tcpのプロパティを開いたところ。リモートデスクトップ接続のサーバ側(リモートデスクトップセッションホスト)の各種設定を変更できる。
  (1)デフォルトの自己発行証明書が割り当てられている場合、「自動生成」と表示される。別の証明書を割り当てると、その名称(フレンドリ名)がここに表示される。
  (2)これをクリックして、割り当てる証明書を選択する。→[A]

[A]

証明書の選択画面 証明書の選択画面
前述の「リモートデスクトップ接続に利用できる『正しい』証明書の条件」に合致する証明書を選択する。
  (1)リストアップされた証明書の一覧。ただし実際には、前述の条件を満たしていない証明書も含まれるので、あらかじめ確認しておいた正しい証明書を選択する。
  (2)これをクリックすると証明書のプロパティを確認できる。

 [OK]ボタンをクリックしていってプロパティを閉じれば設定は完了だ。システムの再起動は不要である。

●PowerShellで証明書を割り当てる方法

 PowerShellを使っても特定の証明書をリモートデスクトップ接続に割り当てられる。

 PowerShellで設定するには、まずWindows OSに管理者アカウントでログオンしてから、[スタート]ボタン−[アクセサリ]−[Windows PowerShell]−[Windows PowerShell]を管理者として起動する。Windows 8以降のクライアントOSなら検索チャームで「powershell」を検索して[Windows PowerShell]アイコンを見つけ、右クリックして[管理者として実行]をクリックする。Windows Server 2012以降のサーバOSであればデスクトップのタスクバーにあるPowerShellアイコンを右クリックし、[管理者として実行]を選ぶ。

 PowerShellの画面が表示されたら、次のコマンドレットを実行して証明書の拇印(ぼいん:Thumbprint)を表示させる。拇印は各証明書に固有の数列であり、証明書の特定によく用いられる。

dir cert:\LocalMachine\My


 このコマンドレットは、格納されている証明書(「cert:」)のうち、ローカルコンピュータ(「\LocalMachine」)の「個人」(\My)フォルダにあるものの一覧を表示する。

PowerShellで証明書の拇印(ぼいん:Thumbprint)を表示する PowerShellで証明書の拇印を表示する
  (1)各証明書の拇印(ぼいん:Thumbprint)を表す文字列。該当する証明書の拇印をコピーしておく。
  (2)各証明書のサブジェクト。これを見て該当の証明書かどうか識別できる。もし同じ内容のサブジェクトが複数あって区別できない場合は、「dir cert:\LocalMachine\My | fl」と実行して各証明書の詳細を表示させればよい。

 拇印が表示されたらコピーして、次のコマンドレットの2行目にある<拇印>と差し替えてから実行する。ここでは、WMIを利用して証明書の割り当てを変更している。

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


 これで設定は完了だ(システムの再起動は不要)。

●グループポリシーで証明書を割り当てる方法

 グループポリシーを使えばWindowsクライアントでもWindows Serverでも割り当て可能だ。ただし、特定の証明書は指定できず、証明書を作成する際に指定した「証明書テンプレート」を指定する必要がある。また前述の2種類の方法のいずれかが設定済みの場合、それはこのグループポリシーより優先して設定される。

 設定するには、管理ツールから[グループ ポリシーの管理]ツールを開き、対象のグループポリシーオブジェクト(GPO)を右クリックして[編集]をクリックする。グループポリシー管理エディタが現れたら、[コンピューターの構成]−[ポリシー]−[管理用テンプレート]−[Windows コンポーネント]−[リモート デスクトップ サービス]−[リモート デスクトップ セッション ホスト]−[セキュリティ]を選び、[サーバー認証証明書テンプレート]のプロパティを開く。

リモートデスクトップ接続のサーバに割り当てる証明書を設定するためのグループポリシー リモートデスクトップ接続のサーバに割り当てる証明書を設定するためのグループポリシー
これは管理ツールの[グループ ポリシーの管理]からグループポリシー管理エディタを起動した例。
  (1)[コンピューターの構成]−[ポリシー]−[管理用テンプレート]−[Windows コンポーネント]−[リモート デスクトップ サービス]−[リモート デスクトップ セッション ホスト]とツリーを展開してから、これを選ぶ。
  (2)これをダブルクリックする。→[B]

 サーバ認証証明書テンプレートのプロパティが表示されたら、[有効]ラジオボタンを選び、さらに[証明書テンプレート名]に証明書のテンプレート名を記入する。例えばWindows ServerのエンタープライズCAを設置した環境の場合、通常はクライアント/サーバともに「コンピューター証明書」テンプレートによる証明書が自動的に生成されるだろう。そのテンプレート名である「Machine」という文字列を指定すれば、ドメイン内の複数のコンピュータに対して一律にこの証明書を割り当てられる。

[B]

「サーバー認証証明書テンプレート」のプロパティ 「サーバー認証証明書テンプレート」のプロパティ
  (1)これがデフォルトで選ばれている。
  (2)これを選んでオンにすると、(4)で指定するテンプレートから生成された証明書が割り当てられる。該当する証明書が複数の場合は、自動的に選択される。また前述の方法で特定の証明書が指定済みの場合、この設定は無視される。
  (3)これを選んでオンにすると、テンプレート名による証明書の割当は無効化される。
  (4)(2)を選んだ場合、この欄には必ず証明書テンプレート名を記入する。例えばWindows標準のコンピュータ証明書なら「Machine」、Webサーバ向け証明書なら「WebServer」と記入する。

 [OK]ボタンをクリックしてプロパティを閉じればGPOの設定は完了だ。そのGPOを対象のドメインあるいはOUにリンクして適用し、しばらく待つと自動的にドメイン所属PCに設定が反映される。手動ですぐに反映するには、クライアントPC側でgpupdateコマンドを実行すればよい。それぞれの操作手順の詳細は、以下の関連記事のリンク先ページを参照していただきたい。

●リモートデスクトップ接続に利用されている証明書を確認する

 以上のいずれかの方法で設定が完了したら、リモートデスクトップ接続を試してみよう。クライアント側のリモートデスクトップ接続画面の[コンピュータ名]には、サーバ側で選択した証明書のサブジェクトのいずれかに一致する名称を指定して(一致しないとその旨の警告やエラーが発生する)、接続を始める。今度は「このリモート コンピューターの ID を識別できません。接続しますか?」という警告が表示されずに接続が確立されるはずだ。

 次に、リモートデスクトップの画面で[Ctrl]+[Alt]+[Break]キーを押して全画面表示にして、画面上部に表示されたバーの左端にある南京錠のアイコンをクリックする(バーが表示されなければ、マウスカーソルを画面上端に沿わせるとプルダウンで現れるはずだ)。すると「リモート デスクトップ接続」というダイアログが現れる。ここに「リモート コンピューターの ID は、サーバーの証明書を使って確認されました」と表示されれば、正しい証明書が割り当てられていると判断できる。

リモートデスクトップ接続時に割り当てられた証明書を確認する リモートデスクトップ接続時に割り当てられた証明書を確認する
これは、[Ctrl]+[Alt]+[Break]キーを押してリモートデスクトップを全画面表示したときに表示される画面上部のバー付近。バーが表示されなければ、マウスカーソルを画面上端に沿わせてみる。
  (1)リモートデスクトップのサーバ認証を表すマーク。これをクリックすると(2)のダイアログが表示される。これが表示されない場合は、サーバが証明書で認証されていないので設定を再確認すること。
  (2)「正しい」証明書によってサーバが認証されたことを表すメッセージ。
  (3)これをクリックすると、認証に利用された証明書のプロパティを確認できる。

■更新履歴

【2013/12/16】初版公開時、WindowsクライアントではPowerShellコマンドレットによる証明書の割り当てができない、と記していましたが、実際には可能です。また、PowerShellを管理者として実行することを明記しました。以上、おわびして訂正いたします。

【2013/09/20】初版公開。


「Tech TIPS」のインデックス

Tech TIPS

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。