Как предоставить проверенный сертификат сервера для подключений удаленного рабочего стола (RDP) к Windows 10

15

В нашем офисе есть машина с Windows 10 Pro, у которой есть открытый порт в Интернет для входящих подключений к удаленному рабочему столу («хост»). Он надежно защищен сложным паролем и ограниченным числом разрешенных попыток и только TLS 1.1 или выше, но он не предоставляет проверенный извне SSL-сертификат, а только самогенерируемый самозаверяющий сертификат, который предоставляет службы удаленных рабочих столов, и это дает нам две проблемы:

  1. Мы не можем быть полностью уверены в том, что при удаленном подключении мы действительно подключаемся к этой машине, а не к некоторым угнанным соединениям.
  2. Наш сайт не проходит проверку на соответствие стандарту PCI-DSS 3.1 (требуется, потому что мы используем там устройство для оплаты дебетовых / кредитных карт в точках продаж, которое подключается через Интернет). Проверка сообщает о неустранимых ошибках этого удаленного рабочего стола с выходом в Интернет: «Самоподписанный сертификат SSL» и «Сертификат SSL с неправильным именем хоста».

Как получить компьютер с Windows 10 Pro (или Windows 7/8 / 8.1 Pro), выполняющий роль сервера / хоста, для предоставления надлежащего SSL-сертификата для проверки удаленного рабочего стола?

gogoud
источник
1
Вы можете поместить самоподписанный сертификат в хранилище сертификатов каждого компьютера, который будет подключаться к этому компьютеру, таким образом, доверять будет только самоподписанный сертификат. Вы также можете получить сертификат, подписанный ЦС, и по умолчанию, поскольку ЦС является доверенным, сертификат, который хочет использовать хост, будет доверенным. Вы не сможете решить проблемы с соответствием PCI-DSS 3.1, если не получите сертификат, подписанный CA. Ты должен сделать это.
Ramhound
Спасибо @Ramhound, вы совершенно правы, мне нужен сертификат, подписанный CA - у меня теперь есть.
gogoud
Связанные -> serverfault.com/questions/444286/…
FreeSoftwareServers

Ответы:

16

Таким образом, вы можете настроить этот хост-компьютер на использование и представление своего (действующего, приобретенного) сертификата SSL с внешним подтверждением (инструкции, вероятно, также работают для Windows 8 и 8.1, могут работать или не работать для Windows 7) (часть этого основана на Microsoft KB 2001849 ):

Во-первых, вам необходимо приобрести подлинный проверенный сертификат SSL.

Если у вас есть этот сертификат в файле формата pkcs12 (например, расширение pfx), вы можете просмотреть отпечаток SHA1, используя Linux или Cygwin, таким образом (он понадобится вам ниже):

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. Файл> Добавить Удалить оснастку> Сертификаты> Добавить> Учетная запись компьютера> Локальный компьютер> ОК
  3. В левом окне щелкните правой кнопкой мыши Сертификаты (Локальный компьютер) Личные, выберите Все задачи / Импорт…
  4. Найдите файл pfx и импортируйте его. Я полагаю, что по соображениям безопасности вы не делаете его экспортируемым.
  5. Расширяя ваши личные / сертификаты, вы должны увидеть 3 сертификата, один из которых - сертификат вашего сайта (например, mysite.com). Щелкните правой кнопкой мыши по сертификату этого сайта и щелкните правой кнопкой мыши, выберите «Все задачи / Управление личными ключами»…
  6. Добавьте пользователя «NETWORK SERVICE» только с правами на чтение (не полный доступ), затем нажмите «Применить».
  7. Закрыть mmc

Используйте regedit для добавления нового двоичного значения с именем SSLCertificateSHA1Hash в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp. Необходимое значение - это отпечаток SHA1 сертификата, полученного выше: щелкните правой кнопкой мыши новое значение, выберите «Изменить», а затем последовательно введите шестнадцатеричные коды (без двоеточий, пробелов или запятых, буквы не чувствительны к регистру) - есть Всего 20 шестнадцатеричных пар (40 символов).

Вам может потребоваться перезагрузить хост-компьютер или перезапустить службы удаленного рабочего стола (из Services.msc), прежде чем он заработает.

Теперь, после подключения удаленного рабочего стола к этому хосту с использованием правильного имени сайта (например, mysite.com), вы увидите заблокированный замок с левой стороны верхней панели подключения: щелчок по нему показывает, что идентификатор удаленного компьютер был проверен. Порт, открытый из Интернета через этот хост, теперь должен пройти тестирование имени хоста PCI-DSS 3.1.

gogoud
источник
Я хотел бы сказать вам несколько тысяч раз. Это работает на 100%
Shockwaver
9

Вот основные шаги, которые я использую:

Получите действительный сертификат для хоста (он не обязательно должен быть от внешнего ЦС, но все ваши машины должны ему доверять). Убедитесь, что у него правильное имя хоста, у меня были проблемы с подстановочными сертификатами.

Установите сертификат на хосте, например:

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

найдите отпечаток для сертификата в пользовательском интерфейсе или в PowerShell:

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

Теперь скажите Remote Desktop использовать этот сертификат:

& 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.crtи domain.ca-bundle& затем я получил domain.keyот генерации запроса.

Вот как я настроил его, используя виртуальную машину Linux для объединения сертификатов и создания CMD отпечатков пальцев и Windows для настройки хоста. Это позволяет полный сценарий установки.

Самые большие различия между моим ответом и ответом @gogoud:

  • Я не редактирую реестр. Я попробовал это, и это не сработало, я использую wmic /namespace:через приглашение CMD.
  • Я настроил строку «Отпечаток пальца» на виртуальной машине Linux, чтобы убрать все ненужные части отпечатка и поместить его в формат, который хочет 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 (открытая повышенная CMD-подсказка):

  • Это может быть дополнительно сценарий с помощью ключа "-p MyPassword"

    certutil.exe -importpfx C:\domain.pfx
    

Теперь добавьте SSLCertificateSHA1Hash к RDP-Tcp через CMD (повышенное приглашение 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
FreeSoftwareServers
источник