オフィスには、着信リモートデスクトップ接続用のインターネットへのオープンポート(「ホスト」)があるWindows 10 Proマシンがあります。複雑なパスワードと許可された試行回数が制限されており、TLS 1.1以上のみで十分に保護されていますが、外部で検証されたSSL証明書は表示されず、リモートデスクトップサービスが提供する自己生成の自己署名証明書のみが表示されます。 2つの問題が発生します。
サーバー/ホストとして機能するWindows 10 Pro(またはWindows 7/8/8.1 Pro)マシンに、リモートデスクトップ検証用の適切なSSL証明書を提示するにはどうすればよいですか?
(既存の、購入した)外部検証済みの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フィンガープリントを取得できます。
証明書の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
必要に応じてこのpfxファイルを移動またはコピーして、Windowsホストマシンからアクセスできるようにします。
openssl x509 -in /etc/ssl/certs/mysite.crt -noout -fingerprint
Pkcs12形式(pfxなど)ファイルをWindowsホストマシンの個人証明書ストアにインポートします。
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ホスト名テストに合格するはずです。
私が使用する基本的な手順は次のとおりです。
ホスト用の有効な証明書を取得します(外部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"
再起動は不要
私の証明書には、必要な2つのファイルdomain.crt
&domain.ca-bundle
が付属しており、リクエストの生成からdomain.key
を取得できます。
Linuxを使用してセットアップする方法を次に示しますVM証明書を組み合わせ、フィンガープリントとWindows CMDを生成してホストをセットアップします。これにより、セットアップの完全なスクリプトを作成できます。
私と@gogoudの答えの最大の違いは次のとおりです。
wmic /namespace:
を使用しました。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