連載
» 2020年04月15日 05時00分 公開

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

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

[島田広道,デジタルアドバンテージ]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Tech TIPS」のインデックス

連載目次

リモートデスクトップ接続時に毎回、このエラーが生じるのを何とかしたい! リモートデスクトップ接続時に毎回、このエラーが生じるのを何とかしたい!

対象OS:Windows 8.1 / Windows 10 / Windows Server 2012 / Windows Server 2012 R2 / Windows Server 2016


 リモートデスクトップ接続でリモートのWindows PCに接続しようとすると、ローカルPCに「このリモート コンピューターの ID を識別できません。接続しますか?」という警告メッセージが表示されることがある。こんな警告を見ると、このまま接続していいのか、もしかしたらどこか別の悪意のあるサイトに接続されてしまうのではないか、といった不安を感じてしまうかもしれない。

 いったい何が原因でこのようなメッセージが表示されるのだろうか? 本稿では、その理由と対策について説明する。

リモートデスクトップ接続時に証明書の警告メッセージが表示される理由

●ローカルPCはリモートPCを電子証明書で検証する

 リモートデスクトップ接続では、クライアント(ローカルPC)がサーバ(リモートPC)を認証するのに「電子証明書」(以下、単に証明書と略)が用いられる。簡単に説明すると、ローカルPC側は接続時にリモートPCが提示する証明書を検証し、リモートデスクトップ接続アプリで指定した接続先の名称を正しく表しているかどうか確認する。

リモートデスクトップ接続時にローカルPCはリモートPCを電子証明書で検証する(概要) リモートデスクトップ接続時にローカルPCはリモートPCを電子証明書で検証する(概要)

 この検証に成功すれば、ローカルPCは「正しい」リモートPCだと判断して接続を確立しようとする。逆に、何らかの問題があって検証に失敗すると、ローカルPCは「正しくない」リモートPCかもしれないと判断し、冒頭のスクリーンショットのような警告メッセージを表示する。

●デフォルトでリモートPCには「正しくない」証明書が設定済み!?

 上記の警告が表示されるのは、デフォルトでリモートPCの証明書が「自己発行」すなわち自身の証明を自分で作った(発行した)ものであることが原因だ(自己発行証明書についてはTIPS「Webサイトのデジタル証明書を確認する」参照)。リモートPC側でリモートデスクトップ接続を有効にすると、専用の自己発行証明書が作成され、リモートデスクトップ接続時の認証に用いられるように自動で設定される。

 この仕組みにより、リモートPC側で証明書の設定を変更しなくても、接続時の警告を無視して[はい]ボタンを押せば「取りあえず」リモートデスクトップ接続が利用できるので手軽だ。

デフォルト設定のリモートPCへの接続時に表示される証明書の警告メッセージ(1/2) デフォルト設定のリモートPCへの接続時に表示される証明書の警告メッセージ(1/2)
デフォルト設定のリモートPCへの接続時に表示される証明書の警告メッセージ(2/2) デフォルト設定のリモートPCへの接続時に表示される証明書の警告メッセージ(2/2)

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

 この問題を根本的に解決するには、信頼されている認証局(CA: Certificate Authority)から発行された正しい証明書をリモートPCに割り当てる設定をすることだ。

リモートPCでリモートデスクトップ接続の「正しい」証明書を設定する

 リモートデスクトップ接続で、リモートPCを証明するための証明書は、「PowerShell」を使って設定する必要がある。以下では、その手順を順番に説明しよう。

●接続先(リモートPC)の名称をメモする

 まずはローカルのPCで、リモートデスクトップ接続アプリに指定している接続先(リモートPC)の名称をメモしておく。

ローカルPCのリモートデスクトップ接続アプリから接続先の名称をメモする ローカルPCのリモートデスクトップ接続アプリから接続先の名称をメモする

●PowerShellを管理者権限で起動する

 次に、リモートPCのWindows OSに管理者アカウントでログオンしてから、PowerShellを管理者権限で起動する。

 [スタート]ボタンをクリックしてスタートメニューを開き、[Windows PowerShell]−[Windows PowerShell]または[PowerShell]−[PowerShell <メジャーバージョン番号>]を右クリックし、[その他]−[管理者として実行」をクリックする。見つからなければ、スタートメニューや「ここに入力して検索」などで「powershell」を検索して[Windows PowerShell]または[PowerShell <メジャーバージョン番号>]アイコンを見つけ、右クリックして[管理者として実行]をクリックする。

 Windows Serverであれば、タスクバーにあるPowerShellアイコンを右クリックし、[管理者として実行]を選んでもよい。

●PowerShellのバージョンを確認する

 PowerShellの画面が表示されたら、次の行を入力、実行する。

$PSVersionTable.PSVersion.Major -ge 5


 ここで「True」と表示されたら、次の「PowerShellでリモートデスクトップ接続に使える証明書を探す」へ進んでいただきたい。

リモートPCのPowerShellで証明書を設定する(1/3) リモートPCのPowerShellで証明書を設定する(1/3)

 一方、「False」と表示されたら、PowerShellのバージョンが低い(Ver.5未満)ため、以下の設定作業は失敗してしまう。既存のアプリケーションやPowerShellスクリプトとの互換性に注意しつつ、PowerShellをVer.5以降にアップグレードしていただきたい。例えば、以下のダウンロードページからWindows Management Framework 5.1をインストールすれば、PowerShell 5.1にアップグレードできる。

●PowerShellでリモートデスクトップ接続に使える証明書を探す

 PowerShellの画面で次の行を入力、実行する。その際には必ず、<接続先の名称>を、先ほどメモした接続先の名称で置き換えること。

$dnsName = "<接続先の名称>"


 続いて、以下のリストを入力、実行する。クリップボードにコピーして、PowerShellにペーストするのが手っ取り早いだろう。

Get-ChildItem -Recurse Cert:\LocalMachine\ | `
?{ $_.HasPrivateKey } | `
?{ `
  Test-Certificate $_ `
    -DNSName $dnsName -EKU 1.3.6.1.5.5.7.3.1 -ErrorAction SilentlyContinue `
} | `
?{ `
  if ($_.Subject -match "CN=(?<SubjectCN>[a-z0-9\.\-]+\??)") `
    { $subjectCN = $Matches.SubjectCN } `
  if ($_.Issuer -match "CN=(?<IssuerCN>[a-z0-9\.\-]+\??)") `
    { $issuerCN = $Matches.issuerCN } `
  ($subjectCN -ne $issuerCN) `
} | `
sort NotAfter | `
%{ `
  $latestCert = $_ ; `
  $_ | fl -Property Subject,FriendlyName,NotAfter,Thumbprint `
}


 すると、幾つかの警告の後に、リモートデスクトップ接続に利用できる証明書の候補一覧が表示される。上記のリストは、リモートPCに保存されている証明書から、リモートデスクトップ接続に必要な条件を満たしたものを抽出して、有効期限が古い順に表示する(つまり、一番下に表示された証明書が最も長持ちする)。

リモートPCのPowerShellで証明書を設定する(2/3) リモートPCのPowerShellで証明書を設定する(2/3)

 もし、1つも候補の証明書が表示されなければ、ここで作業はいったん中断し、後述の「リモートデスクトップ接続に利用できる証明書を取得するには」のようにして、リモートデスクトップ接続に使える証明書を新たに発行、取得してほしい。

●見つかった証明書をリモートデスクトップ接続に割り当てる

 候補が1つ以上表示された場合は、以下の行を入力、実行する。すると、選び出された証明書がリモートデスクトップ接続用として実際に割り当てられる。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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