SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

リモートデスクトップ接続時の資格情報と証明書の記憶について

leave a comment

Windows からリモートデスクトップで Windows Server 等に接続する場合、資格情報と証明書警告の無視を記憶しておくことができます。
imageimage

これらの情報を初期化したい場合、どの情報をクリアすればよいかをメモとして。
資格情報の記憶部分については、Connect-Mstsc – Open RDP Session with credentials のスクリプトがとても参考になります。

リモートデスクトップの資格情報を記憶は操作したユーザー単位に保持されます。
保持される場所ですが「資格情報マネージャー」に登録が行われます。
記憶するにした場合、「Windows 資格情報」に登録が行われます。
次の画像が資格情報マネージャーの表示ですが、「TERMSRV/」で始まっているものがリモートデスクトップ用の資格情報となります。
image
冒頭で紹介したスクリプトでは cmdkey を使用して、資格情報を登録し、その資格情報を用いてリモートデスクトップで接続が行われるようになっています。
証明書の警告については、資格情報ではなくレジストリに登録が行われています。
「HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers」配下に、接続先として指定した情報単位にレジストリのキーが作成されその中に「CertHash」が登録されます。
image
証明書のハッシュ情報が、登録されることでその証明書を許可したとみなす形ですね。
リモートデスクトップで使用している証明書のハッシュ (SHA1 ハッシュ) については、接続先の環境で次のコマンドを実行することで確認できます。

(Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'").SSLCertificateSHA1Hash

image
このハッシュ値を事前に接続元に登録することで、証明書の警告を操作なしにスキップさせることが可能です。
ハッシュ値をそのままの内容でバイナリ登録する必要があるため、取得したハッシュを使用して次のようなスクリプトの実行で登録ができるかと。

(FF だった場合、255 ではなく、レジストリの REG_BINARY としては、FF で登録する必要があるため、加工しています)

$certHash = "FFFFFFFFFF"
$Target = "xxxxxxx"
if (!(Test-Path  "registry::\HKCU\Software\Microsoft\Terminal Server Client\Servers\$($Target)")){
        New-Item "registry::\HKCU\Software\Microsoft\Terminal Server Client\Servers\$($Target)" -Force | Out-Null
}
# 証明書ハッシュの設定
$certHash =$certHash
$bytesCertHash = @()
for ($i = 0; $i -lt $certHash.Length; $i += 2){
    $bytesCertHash += [byte][int]::Parse($certHash.Substring($i, 2), "HexNumber")
}
New-ItemProperty "registry::\HKCU\Software\Microsoft\Terminal Server Client\Servers\$($Target)" -PropertyType binary -Name CertHash -Value $bytesCertHash -Force | Out-Null

今回は削除していませんが、リモートデスクトップの接続履歴については「HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default」を削除すればよかったかと。

記憶した情報を一度初期化したいと思った場合は、これらの情報を確認しておくと良いのではないでしょうか。

Share

Written by Masayuki.Ozawa

3月 11th, 2019 at 11:12 pm

Leave a Reply