web-dev-qa-db-ja.com

Windows 10へのリモートデスクトップ(RDP)接続に検証済みのサーバー証明書を提供する方法

オフィスには、着信リモートデスクトップ接続用のインターネットへのオープンポート(「ホスト」)があるWindows 10 Proマシンがあります。複雑なパスワードと許可された試行回数が制限されており、TLS 1.1以上のみで十分に保護されていますが、外部で検証されたSSL証明書は表示されず、リモートデスクトップサービスが提供する自己生成の自己署名証明書のみが表示されます。 2つの問題が発生します。

  1. リモートで接続するときは、完全にこのマシンに接続していて、ハイジャックされた接続ではないので、完全に確信することはできません。
  2. 私たちのサイトは、PCI-DSS 3.1コンプライアンスチェックに失敗しました(インターネット経由で接続するPOSのデビット/クレジットカードマシンを使用しているため、必須です)。このチェックは、このインターネットに直接接続されたリモートデスクトップポートでの致命的なエラーを報告します:「SSL自己署名証明書」および「間違ったホスト名のSSL証明書」。

サーバー/ホストとして機能するWindows 10 Pro(またはWindows 7/8/8.1 Pro)マシンに、リモートデスクトップ検証用の適切なSSL証明書を提示するにはどうすればよいですか?

13
gogoud

(既存の、購入した)外部検証済みのSSL証明書を使用および提示するようにこのホストマシンを設定できます(この手順はおそらくWindows 8および8.1でも機能し、Windows 7では機能しない場合があります)(この部分は- Microsoft KB 2001849 ):

まず、本物の検証済みのSSL証明書を購入する必要があります。

この証明書をpkcs12形式のファイル(例:pfx拡張子)で持っている場合は、LinuxまたはCygwinを使用してSHA1フィンガープリントを表示できます(以下で必要になります)。

openssl pkcs12 -in mysite.pfx -nodes|openssl x509 -noout -fingerprint

または、Linuxサーバーの/ etc/ssl(/etc/ssl/certs/mysite.crt、/etc/ssl/mysite.ca-bundleおよび/etc/ssl/private/mysite.keyに個別の証明書ファイルがある場合)pfxファイルを作成してSHA1フィンガープリントを取得できます。

  1. 証明書のpfxファイルをまだ作成していない場合は作成します(ここではmysite.pfx)–要求されたときに適切なパスワードを設定します。

    Sudo openssl pkcs12  -export -out mysite.pfx -inkey /etc/ssl/private/mysite.pem -in /etc/ssl/certs/mysite.crt -certfile /etc/ssl/mysite.ca-bundle
    
  2. 必要に応じてこのpfxファイルを移動またはコピーして、Windowsホストマシンからアクセスできるようにします。

  3. キーのSHA1フィンガープリントを表示します(これは以下で必要になります)。

openssl x509 -in /etc/ssl/certs/mysite.crt -noout -fingerprint

Pkcs12形式(pfxなど)ファイルをWindowsホストマシンの個人証明書ストアにインポートします。

  1. スタート>ファイル名を指定して実行> mmc
  2. ファイル>スナップインの削除の追加>証明書>追加>コンピュータアカウント>ローカルコンピュータ> OK
  3. 左側のウィンドウで、[証明書(ローカルコンピューター)個人]を右クリックして、[すべてのタスク/インポート…]を選択します。
  4. Pfxファイルを見つけてインポートします。セキュリティ上の理由から、エクスポートできないようにすることをお勧めします。
  5. 個人/証明書を展開すると、3つの証明書が表示されます。そのうちの1つはサイト証明書(mysite.comなど)です。このサイト証明書を右クリックして右クリックし、[すべてのタスク]/[秘密キーの管理…]を選択します。
  6. 読み取り権限のみ(フルコントロールではない)のユーザー「NETWORK SERVICE」を追加して、適用します
  7. Mmcを閉じる

Regeditを使用して、SSLCertificateSHA1Hashと呼ばれる新しいバイナリ値をHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcpに追加します。必要な値は、上記で取得した証明書のSHA1フィンガープリントです。新しい値を右クリックし、[変更]を選択してから、16進コードを順番に入力します(コロン、スペース、カンマは使用せず、文字は大文字と小文字を区別しません)。全部で20の16進数ペア(40文字)。

動作する前に、ホストマシンを再起動するか、リモートサービス(Services.mscから)を再起動する必要がある場合があります。

これで、正しいホスト名(mysite.comなど)を使用してこのホストにリモートデスクトップ接続した後、上部の接続バーの左側にロックされた南京錠が表示されます。これをクリックすると、リモートのIDが表示されますコンピュータが検証されました。インターネットからこのホストまで開いているポートは、PCI-DSS 3.1ホスト名テストに合格するはずです。

15
gogoud

私が使用する基本的な手順は次のとおりです。

ホスト用の有効な証明書を取得します(外部CAから取得する必要はありませんが、すべてのマシンがそれを信頼する必要があります)。ホスト名が正しいことを確認してください。ワイルドカード証明書に問題がありました。

次のように、ホストに証明書をインストールします。

certutil.exe -p myPassword -importPFX c:\mycert.pfx noExport

uIまたはPowerShellで証明書の拇印を見つけます。

$tp = (ls Cert:\LocalMachine\my | WHERE {$_.Subject -match "something unique in your certs subject field" } | Select -First 1).Thumbprint

次に、リモートデスクトップにその証明書を使用するように指示します。

& wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="$tp" 

再起動は不要

8
Peter Hahndorf

私の証明書には、必要な2つのファイルdomain.crtdomain.ca-bundleが付属しており、リクエストの生成からdomain.keyを取得できます。

Linuxを使用してセットアップする方法を次に示しますVM証明書を組み合わせ、フィンガープリントとWindows CMDを生成してホストをセットアップします。これにより、セットアップの完全なスクリプトを作成できます。

私と@gogoudの答えの最大の違いは次のとおりです。

  • レジストリは編集しません。試してみましたが、うまくいきませんでした。CMDプロンプトでwmic /namespace:を使用しました。
  • Linuxの "Fingerprint"行を調整しましたVMサムプリントのすべての不要な部分を取り除き、Windowsが望むフォーマットで配置しました(IE:コロンなし、単語なし、フィンガープリントだけw/小文字)。
  • NETWORK SERVICE権限を追加するスクリプトも作成しました。

作業するディレクトリを作成し、3つのファイルをそのディレクトリに移動します:

domain.ca-bundle  domain.crt  domain.key 

pfxフォーマットキーを作成:

Sudo openssl pkcs12  -export -out domain.pfx -inkey *.key -in *.crt -certfile *.ca-bundle

SSLCertificateSHA1Hash/FingerPrintをTXT File:にエクスポートする

Sudo openssl x509 -in *.crt -noout -fingerprint | sed -e 's/SHA1 Fingerprint=//g' | sed -e 's/://g' | tr '[:upper:]' '[:lower:]' > SSLCertificateSHA1Hash.txt

証明書をWindowsにインポート(高度なCMDプロンプトを開く):

  • これは、スイッチ "-p MyPassword"を使用してさらにスクリプト化できます。

    certutil.exe -importpfx C:\domain.pfx
    

SSLCertificateSHA1HashをCMDを介してRDP-Tcpに追加(CMD昇格プロンプト):

set /p FingerPrint=<C:\SSLCertificateSHA1Hash.txt
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="%FingerPrint%"

今すぐ「読み取り専用」権限を持つユーザー「ネットワークサービス」を追加する必要があります:

icacls.exe "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\*" /grant "NETWORK SERVICE":R

ホストの再起動:

 shutdown /r /t 5
1