リモートデスクトップで接続しようとすると、リモートPCのIDを識別できない、という警告がクライアント側に表示されることがある。これはデフォルトでサーバの認証に自己発行の証明書が使われているからだ。そこで、正規の証明書を割り当てて、警告を表示されないようにする方法を説明する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
対象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の証明書が「自己発行」すなわち自身の証明を自分で作った(発行した)ものであることが原因だ(自己発行証明書についてはTIPS「Webサイトのデジタル証明書を確認する」参照)。リモートPC側でリモートデスクトップ接続を有効にすると、専用の自己発行証明書が作成され、リモートデスクトップ接続時の認証に用いられるように自動で設定される。
この仕組みにより、リモートPC側で証明書の設定を変更しなくても、接続時の警告を無視して[はい]ボタンを押せば「取りあえず」リモートデスクトップ接続が利用できるので手軽だ。
その半面、警告を無視することはサーバの認証をしていないも同然で、不正なサーバによるなりすましを防止できないといった危険がある。例えるなら、HTTPSでWebサイトに接続したときにしばしば表示されるSSLサーバ証明書の警告やエラーを無視して、接続を強行するのと似たようなものだ。特に、インターネットを介してリモートPCと接続する環境では避けたい状況だ。
この問題を根本的に解決するには、信頼されている認証局(CA: Certificate Authority)から発行された正しい証明書をリモートPCに割り当てる設定をすることだ。
リモートデスクトップ接続で、リモートPCを証明するための証明書は、「PowerShell」を使って設定する必要がある。以下では、その手順を順番に説明しよう。
まずはローカルのPCで、リモートデスクトップ接続アプリに指定している接続先(リモートPC)の名称をメモしておく。
次に、リモートPCのWindows OSに管理者アカウントでログオンしてから、PowerShellを管理者権限で起動する。
[スタート]ボタンをクリックしてスタートメニューを開き、[Windows PowerShell]−[Windows PowerShell]または[PowerShell]−[PowerShell <メジャーバージョン番号>]を右クリックし、[その他]−[管理者として実行」をクリックする。見つからなければ、スタートメニューや「ここに入力して検索」などで「powershell」を検索して[Windows PowerShell]または[PowerShell <メジャーバージョン番号>]アイコンを見つけ、右クリックして[管理者として実行]をクリックする。
Windows Serverであれば、タスクバーにあるPowerShellアイコンを右クリックし、[管理者として実行]を選んでもよい。
PowerShellの画面が表示されたら、次の行を入力、実行する。
$PSVersionTable.PSVersion.Major -ge 5
ここで「True」と表示されたら、次の「PowerShellでリモートデスクトップ接続に使える証明書を探す」へ進んでいただきたい。
一方、「False」と表示されたら、PowerShellのバージョンが低い(Ver.5未満)ため、以下の設定作業は失敗してしまう。既存のアプリケーションやPowerShellスクリプトとの互換性に注意しつつ、PowerShellをVer.5以降にアップグレードしていただきたい。例えば、以下のダウンロードページからWindows Management Framework 5.1をインストールすれば、PowerShell 5.1にアップグレードできる。
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に保存されている証明書から、リモートデスクトップ接続に必要な条件を満たしたものを抽出して、有効期限が古い順に表示する(つまり、一番下に表示された証明書が最も長持ちする)。
もし、1つも候補の証明書が表示されなければ、ここで作業はいったん中断し、後述の「リモートデスクトップ接続に利用できる証明書を取得するには」のようにして、リモートデスクトップ接続に使える証明書を新たに発行、取得してほしい。
候補が1つ以上表示された場合は、以下の行を入力、実行する。すると、選び出された証明書がリモートデスクトップ接続用として実際に割り当てられる。
Copyright© Digital Advantage Corp. All Rights Reserved.