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


15

私たちのオフィスには、着信リモートデスクトップ接続(「ホスト」)のためにインターネットへのポートが開いている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証明書を提示するにはどうすればよいですか?


1
このマシンに接続する各マシンの証明書ストアに自己署名証明書を配置することもできます。これにより、その自己署名証明書のみが信頼されます。CAによって署名された証明書を取得することもできます。デフォルトでは、CAは信頼されているため、ホストが使用する証明書は信頼されます。 CAによって署名された証明書を取得しない限り、PCI-DSS 3.1コンプライアンスの問題を解決することはできません。 あなたはそれをすべきです。
ラムハウンド2016年

@Ramhoundに感謝します。正解です。CA署名付き証明書が必要です。
gogoud 2016年

回答:


16

このホストマシンは、(既存の、購入した)外部検証済みの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ホスト名テストに合格するはずです。


私はあなたに数千回賛成したいと思います。100%動作
Shockwaver

9

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

ホスト用の有効な証明書を取得します(外部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" 

再起動は不要


ワイルドカードSSL証明書は問題なく機能しましたが、MMCを開いてネットワークサービスアクセス許可を追加する必要がありました。そうしないと機能しません。
FreeSoftwareServers

「Windows 10」だけでなく「Windows Server 2016」でもワイルドカード証明書をインポートできましたが、Windows Serverにはcertutil.exeがないことがわかりました。mycert.pfxを証明書ストアに手動でインポートできるため、これは大した問題ではありません。私はしませんでしたオープンMMCに持っており、ネットワークサービスのアクセス権を追加しませんでした。
TMT

1

私の証明書は、必要に応じて2つのファイルが付属していますdomain.crtdomain.ca-bundle&その後、私は私が持っているdomain.key要求を生成するから。

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

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

  • レジストリは編集しません。私はそれを試してみましたが、うまくいきませんでしたwmic /namespace:。CMDプロンプトを使用しました。
  • Linux VMの「フィンガープリント」の行を調整して、サムプリントの不要な部分をすべて取り除き、Windowsが望む形式で配置しました。(IE:コロンなし、単語なし、小文字の指紋のみ)。
  • 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ファイルにエクスポートします。

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

証明書をWindowsにインポート(Open Elevated CMDプロンプト):

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

    certutil.exe -importpfx C:\domain.pfx
    

次に、SSLCertificateSHA1HashをCMD(Elevated CMD Prompt)を介してRDP-Tcpに追加します。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.