Настройка PowerShell Remoting (WinRM) через HTTPS

По умолчанию трафик в сеансе PowerShell Remoting шифруется независимо от того, используется ли транспортный протокол HTTP (TCP/5985) или HTTPS (TCP/5986). В любом случае, весь трафик шифруется с помощью ключа AES-256. Однако если вы подключаетесь к удаленному компьютеру за пределами леса AD или в рабочей группе (с которой Kerberos не может установить доверительные отношения), вы подвергаетесь риску атак типа «человек посередине». Microsoft рекомендует всегда использовать транспорт HTTPS для PSRemoting при подключении к сторонним компьютерам.

В этой статье мы покажем, как настраивать PowerShell Remoting через HTTPS , используя сертификат SSL. Сеансы PSRemoting по HTTPS обеспечивают более высокий уровень безопасности сеанса при подключении к компьютерам за пределами домена/леса AD.

В следующих шагах описывается, как настроить удаленное устройство под управлением Windows, к которому вы хотите подключиться с помощью PowerShell Remoting по HTTPS.

Убедитесь, что для сетевого расположения в Windows установлено значение Private или Domain:

Get-NetConnectionProfile

Включите WinRM и PSRemoting с помощью команды:

Enable-PSRemoting -Force

В домене можно настроить WinRM с помощью GPO.

Чтобы настроить HTTPS для WinRM, вам сначала нужно создать SSL-сертификат на компьютере, к которому вы хотите подключиться. Сертификат будет использоваться для шифрования трафика WinRM. Проще создать самоподписанный сертификат с помощью PowerShell. В доменной среде вы можете выпустить сертификаты WinRM автоматически, используя Auto-Enrollment.

Укажите имя компьютера и его IP-адрес в качестве DNS-имени сертификата (это удобно, если в вашей сети нет DNS-сервера). Вы можете получить оба значения для Subject Alternative Name сертификата и сгенерировать самоподписанный сертификат с помощью PowerShell:

$hostName = $env:COMPUTERNAME
$hostIP=(Get-NetAdapter| Get-NetIPAddress).IPv4Address|Out-String
$srvCert = New-SelfSignedCertificate -DnsName $hostName,$hostIP -CertStoreLocation Cert:\LocalMachine\My
$srvCert

Новый SSL-сертификат появится в личном хранилище сертификатов на компьютере.

создание самоподписанного сертификата ssl с помощью powershell

По умолчанию для PowerShell Remoting в Windows создаются два слушателя на разных портах:

  • HTTP на порту 5985
  • HTTPS на порту 5986

Вы можете получить список активных слушателей WSMan, как показано ниже:

Get-ChildItem wsman:\localhost\Listener

Удаление стандартных слушателей HTTP и HTTPS:

Get-ChildItem wsman:\localhost\Listener\ | Where-Object -Property Keys -like 'Transport=HTTP*' | Remove-Item -Recurse

Создайте новый HTTPS-приемник и привяжите к нему свой сертификат:

New-Item -Path WSMan:\localhost\Listener\ -Transport HTTPS -Address * -CertificateThumbPrint $srvCert.Thumbprint -Force

создание https-приемника в winrm

Создайте правило брандмауэра Windows, разрешающее HTTPS-трафик WinRM, или убедитесь, что оно активно:

New-NetFirewallRule -Displayname 'WinRM - Powershell remoting HTTPS-In' -Name 'WinRM - Powershell remoting HTTPS-In' -Profile Any -LocalPort 5986 -Protocol TCP

Перезапустите службу WinRM:

Restart-Service WinRM

Вы можете проверить, к какому отпечатку сертификата привязан HTTPS-приемник WinRM, используя эту команду:

WinRM e winrm/config/listener

Удаленный хост настроен. Теперь необходимо экспортировать SSL-сертификат в файл CER:

Export-Certificate -Cert $srvCert -FilePath c:\PS\SSL_PS_Remoting.cer

Помните, что конфигурации сервера и клиента WinRM не допускают незашифрованных соединений (по умолчанию):

dir WSMan:\localhost\Service | ? Name -eq AllowUnencrypted
dir WSMan:\localhost\Client | ? Name -eq AllowUnencrypted

WinRM не разрешает незашифрованные соединения

При необходимости вы можете отключить незашифрованные соединения следующим образом:

winrm set winrm/config/service '@{AllowUnencrypted="false"}'
winrm set winrm/config/client '@{AllowUnencrypted="false"}

Скопируйте файл CER на компьютер администратора и импортируйте его с помощью приведенной ниже команды (или разверните сертификат на других компьютерах с помощью GPO):

Import-Certificate -FilePath c:\PS\SSL_PS_Remoting.cer -CertStoreLocation Cert:\LocalMachine\root\

Затем, чтобы подключиться к удаленному узлу Windows с помощью WinRM HTTPS, вы должны использовать команду -UseSSL аргумент в командах Enter-PSSession и Invoke-Command. В следующем примере мы подключимся к удаленному хосту из консоли PowerShell по его IP-адресу (обратите внимание, что мы не добавили этот IP-адрес в TrustedHosts):

$SessionOption = New-PSSessionOption -SkipCNCheck
Enter-PSSession -Computername 192.168.13.4 -UseSSL -Credential maxbak -SessionOption $SessionOption

powershell remoting over https using the UseSSL option

При подключении по IP-адресу без параметра SkipCNCheck опция, возникает следующая ошибка: The SSL certificate contains a common name (CN) that does not match the hostname.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *