Если вы уже выполняете удаленные команды с помощью PowerShell Remoting (PSRemoting), вы знаете, насколько удобна эта функция. Вы можете подключаться к одному или нескольким удаленным компьютерам и управлять ими, как если бы они были локальными. PSRemoting зависит от Windows Remote Management (WinRm), чтобы сделать это возможным, и если вы не используете WinRM через SSL, вы можете подвергнуть себя некоторым проблемам с безопасностью.
В этом практическом руководстве вы узнаете, как настроить Windows на клиенте и сервере для использования WinRM через HTTPS (SSL), а также как использовать сертификаты для аутентификации при использовании WinRM через HTTPS.
Предварительные требования
Если вы хотите следовать этому учебному пособию, убедитесь, что у вас есть следующее:
- A Windows 7+ or Server 2008 R2 machine to serve as the client machine. This tutorial will use Windows 10.
- A Windows 7+ or Server 2008 R2+ machine to serve as the server machine. This tutorial will use Windows Server 2019.
- Доступ к локальной учетной записи администратора или учетной записи с правами локального администратора на обеих машинах – клиенте и сервере.
- Службы сертификации Active Directory (ADCS) Инфраструктура открытых ключей (PKI), настроенная. Для рабочих сред это было бы полезно, но для этого учебного пособия и тестирования это необязательно. Руководство будет предполагать, что ИКП настроена как предприятие или автономный CA.
Почему использовать WinRM через SSL?
PSRemoting, изначально, использует WinRM и позволяет вам управлять удаленными клиентскими машинами. Как только PSRemoting устанавливает сеанс через WinRM, он шифрует все коммуникации от клиента к серверу. Кроме того, процедура настройки для реализации PSRemoting без HTTPS довольно проста.
Если PSRemoting уже шифрует коммуникации в сеансе, зачем заморачиваться с настройкой таких вещей, как ADCS и управление сертификатами, когда все уже зашифровано?
Потому что во время процесса аутентификации учетные данные могут быть переданы в небезопасных форматах в зависимости от используемого типа аутентификации.
Один из самых простых способов сделать PSRemoting более безопасным – использовать WinRM по протоколу HTTPS вместо HTTP. HTTPS оборачивает всю вашу потоковую связь, включая аутентификацию, в слой шифрования, который уже использует WinRM. HTTPS также одновременно предоставляет способ проверить, что сервер, к которому вы подключаетесь, действительно тот, за который его принимаете.
Настройка WinRM с самоподписанным сертификатом
Давайте перейдем к демонстрациям. В первом трюке вы узнаете, как настроить шифрование коммуникаций PSRemoting с помощью WinRm по SSL с использованием самоподписанного сертификата.
Использование самоподписанного сертификата – отличный способ настроить тестовую среду без забот о PKI, таком как ADCS. Когда вы используете самоподписанный сертификат, вы генерируете сертификат, который подписывает сам сервер, фактически подтверждая свою подлинность.
Сертификаты обычно выполняют две задачи: аутентификацию соединения и его шифрование. Использование самоподписанного сертификата реализует только последнее. Для проверки подлинности сервера всегда следует использовать предоставляемые PKI сертификаты. Сертификаты, предоставленные PKI, обеспечивают единый источник доверия по сравнению с необходимостью доверять каждому самоподписанному сертификату вручную.
Настройка WinRM через SSL с использованием самоподписанного сертификата включает в себя четыре основных шага:
- Создание самоподписанного сертификата на целевой машине.
- Настройка веб-сервера WinRM (слушателя) сервера для использования самоподписанного сертификата для аутентификации.
- Открытие соответствующих портов в брандмауэре Windows на целевой машине.
- Выполнение команды для инициации удаленного соединения на клиенте с использованием PowerShell-командлета, такого как
Enter-PSSession
.
Теперь давайте рассмотрим каждый из этих шагов.
Создание самоподписанного сертификата
Первым шагом является генерация самоподписанного сертификата на сервере. При подключении PSRemoting будет использовать этот сертификат для шифрования всей коммуникации.
Во время нахождения на ServerB с открытой консолью Windows PowerShell в режиме администратора выполните cmdlet New-SelfSignedCertificate
, как показано ниже. Запуск указанной ниже команды генерирует сертификат для ServerB.domain.com в хранилище сертификатов личного компьютера локальной машины.

Параметр Subject
должен содержать полное доменное имя сервера. WinRM использует subject для проверки подлинности сервера.
Даже если сервер находится в рабочей группе, всегда укажите доменное имя, например, domain.com или lab.local. При подключении к машине-получателю имя DNS, к которому вы подключаетесь, должно точно соответствовать этому имени Subject, в противном случае подключение завершится неудачей.
Расширение TextExtension
позволяет определить использование ключа (2.5.29.37
), которое определяет, для чего разрешено использовать сертификат. Определите использование ключа для аутентификации сервера ({text}1.3.6.1.5.5.7.3.1
), чтобы убедиться, что сертификат можно использовать только для аутентификации сервера.
После выполнения
New-SelfSignedCertificates
он вернет отпечаток сертификата, который он сгенерировал. Сохраните его, так как вам понадобится для следующей команды.
Настройка прослушивателя WinRM
После создания самоподписанного сертификата на сервере настройте прослушиватель WinRm для использования этого сертификата для аутентификации. Для этого используйте команду winrm create
, как показано ниже.
В команде ниже параметр Address=*
указывает прослушивателю прослушивать любой IP-адрес, настроенный на сервере. Если на сервере настроено несколько IP-адресов, вы можете определить здесь конкретный IP-адрес.
Не забудьте заменить заполнитель
<cert thumbprint here>
отпечатком, возвращенным на предыдущем шаге.

Открытие порта брандмауэра WinRM SSL
Затем, если вы используете брандмауэр Windows, вам придется разрешить трафик HTTPS, поступающий на сервер через стандартный порт HTTPS 5986
.
Откройте порт брандмауэра для WinRM через HTTPS, используя PowerShell, запустив нижеуказанную команду.
Подключение к серверу через SSL
Теперь вы настроили удаленный сервер Windows для принятия соединений WinRM через SSL. В этот момент вернитесь к клиенту и выполните любые команды PSRemoting, которые хотели бы протестировать. Например, вы можете попробовать командлеты Enter-PSSession
или Invoke-Command
. Только теперь вы подключаетесь немного по-другому, чем с помощью стандартного HTTP-соединения.
Подключение по HTTPS обычно требует одного параметра UseSSL
. Этот параметр указывает команде искать слушатель HTTPS WinRM, в отличие от слушателя HTTP по умолчанию. Параметр UseSSL
доступен для большинства команд PSRemoting.
Для тестирования выполните команду Enter-PSSession
, предоставив полное доменное имя сервера, как определено предметом самоподписанного сертификата, объект PSCredential для определения имени пользователя и пароля, и, наконец, параметр переключения UseSSL
.
Если вы выполните вышеуказанную команду, вы получите сообщение об ошибке, поскольку вы настроили слушатель WinRM на сервере для использования самоподписанного сертификата. Когда клиент PSRemoting пытается аутентифицироваться на сервере, он пытается проверить сертификат, и не может этого сделать. Самоподписанный сертификат не имеет цепочки доверия, которую может следовать команда, и она завершается неудачей.

Для подключения к серверу с самоподписанным сертификатом необходимо отменить проверку доверия к сертификату. Вы можете сделать это, создав объект PSSessionOption с именем SkipCACheck
, используя командлет New-PSSessionOption
и передав его в команду, как показано ниже.
Вы можете определить множество различных объектов PSSessionOption, чтобы добавить параметры для вашего удаленного подключения, которые не включены непосредственно в командлет
Enter-PSSession
.
Попробуйте подключиться снова, и теперь PowerShell должен запросить у вас учетные данные. После их предоставления вы должны сможете подключиться к серверу с использованием WinRM через SSL!
Настройка WinRM с сертификатом, подписанным ЦС
Если вы планируете использовать PSRemoting с использованием WinRM в производственной среде и хотите оставаться максимально безопасными, вам следует обратить внимание на WinRM через SSL с использованием сертификата, подписанного центром сертификации (ЦС).
Сертификаты, подписанные ЦС, поддерживают цепочку доверия и более безопасны, чем простые самоподписанные сертификаты, потому что они проверяют идентичность издателя сертификата.
Если вы находитесь в среде Active Directory, одним из наиболее распространенных способов настройки ЦС является использование ADCS. С ADCS вы можете развертывать сертификаты на устройства и настраивать WinRM для использования этих сертификатов.
Этот учебник предполагает, что у вас уже настроен и работает служба ADCS в вашей среде.
Для быстрой настройки вы можете следовать документации Microsoft, но для развертывания в производственной среде вам следует тщательно изучить конфигурацию, так как центром усилий по шифрованию организации является удостоверяющий центр.
Создание запроса на сертификат
Первый шаг в использовании сертификата, выданного ЦУ, – создание сертификата. Для этого необходимо сначала создать запрос на сертификат с помощью запроса на подпись сертификата (CSR). После создания этот CSR можно отправить ЦУ для выдачи сертификата.
Этот раздел подходит для развертывания ADCS, когда это предприятий ЦУ или автономный ЦУ. Если вы используете автономный ЦУ, интегрированный в AD, вы можете ускорить регистрацию сертификатов, не проходя через шаги в этом разделе, используя авто-регистрацию сертификатов или шаблоны сертификатов.
Пока на сервере (ServerB в этом руководстве), создайте CSR:
- Запустите certlm.msc, чтобы открыть менеджер сертификатов Windows.
2. Щелкните правой кнопкой мыши на хранилище Личные и выберите Все задачи —> Расширенные операции —> Создать пользовательский запрос.
3. Для этого руководства оставьте все поля по умолчанию до тех пор, пока не дойдете до страницы с Информацией о сертификате, показанной ниже. Когда вы окажетесь здесь, нажмите на выпадающий список Сведения и выберите Свойства.

4. Щелкните на вкладке Предмет и измените Тип на Общее имя.
5. Теперь введите полное доменное имя сервера, если он присоединен к домену, или просто имя хоста, если нет, и нажмите Добавить.

Обратите внимание, что для использования с прослушивателем WinRM SSL необходимо использовать общее имя. Другие варианты в списке могут быть включены, но не требуются для этой конфигурации.
6. Щелкните вкладку Расширение.
7. Если вы не используете аутентификацию на основе сертификатов, о которой будет рассказано позже, раскройте заголовок расширенного использования ключа и добавьте Аутентификация сервера. Этот тип использования ключа указывает Windows, что сертификат должен использоваться для аутентификации сервера. Другие варианты включают аутентификацию клиента, подпись кода и шифрование документов.
8. Если вы хотите настроить аутентификацию на основе сертификата, убедитесь, что вы выбрали Аутентификация клиента, как показано ниже.

9. Затем перейдите на вкладку Закрытый ключ и обратите внимание на Параметры ключа. Измените размер ключа по умолчанию с 1024 до минимум 2048 для усиления безопасности ключевой пары.
В Windows также доступны более надежные криптографические провайдеры, но может возникнуть несовместимость с более старым программным обеспечением.
10. Закройте окно Свойства сертификата и сохраните настройки, нажав OK, а затем нажмите Далее, чтобы продолжить с предложениями.
11. Теперь укажите путь для вывода запроса на сертификат, откуда вы сможете его получить позже, и нажмите Готово.
После завершения у вас должен быть файл запроса на сертификат.
Запрос сертификата
После создания запроса вам теперь нужно отправить этот запрос вашему ЦС, который сгенерирует сертификат. Для этого:
-
Перейдите на свой сервер ADCS по адресу http://<Имя сервера FQDN>/certsrv/certrqxt.asp.

2. Откройте ранее созданный файл запроса на сертификат в блокноте и скопируйте текст из файла запроса на сертификат в поле запроса. Для этого сертификата не требуется Дополнительных атрибутов.
3. Нажмите Отправить. Это отправит ваш запрос в Центр сертификации. Затем должен появиться идентификатор запроса, который потребуется позднее. Сохраните его! Вам это понадобится позже.
4. Теперь подключитесь к серверу Центра сертификации, который является частью вашей среды ADCS, с помощью Диспетчера сертификатов Windows на вашем локальном компьютере или через RDP, запустив certsrv.msc.
5. Нажмите Ожидающие запросы.

6. Щелкните правой кнопкой мыши на ожидающем запросе, выберите Все задачи, и нажмите Выдать. Это утвердит запрос, который вы только что отправили, на основе идентификатора запроса из предыдущего шага.
Регистрация сертификата
Теперь, когда вы выдали сертификат в Центре сертификации, пришло время зарегистрировать сертификат на сервере, на котором настраивается WinRM. Для этого:
- С сервера, на котором вы настраиваете WinRM через SSL, перейдите по адресу http://<FQDN имени сервера>/certckpn.asp. Вы должны увидеть один ожидающий запрос на сертификат.

Вы можете получить общедоступный сертификат с другого компьютера при необходимости, но начинать с сервера, на котором вы настраиваете WinRM через HTTPS, упрощает процесс.
2. Выберите запрос, который вы отправили из списка и загрузите цепочку сертификатов. Если сервер, на котором вы настраиваете WinRM по протоколу HTTPS, имеет ваш ЦС в качестве корневого, загрузите всю цепочку сертификатов.

3. Откройте файл цепочки сертификатов. Вы должны увидеть сертификат для вашего сервера и любые сертификаты удостоверяющих центров, находящиеся выше в цепочке. Ниже win2.lab.int находится запрошенный сертификат, а WIN2-CA – сертификат ЦС, который выдал сертификат для win2.lab.int.

4. Дважды щелкните на одном из сертификатов, и в открывшемся окне нажмите кнопку Установить сертификат. Поскольку этот сертификат будет использоваться сервером, а не конкретным пользователем, измените опцию на Локальный компьютер.

5. Продолжайте процесс, оставляя все параметры по умолчанию. По умолчанию сертификат будет размещен в хранилище доверенных корневых сертификатов.
6. Теперь повторите шаги с 3 по 5 для каждого из остальных сертификатов в списке. Если у вас есть более одного сертификата, убедитесь, что все остальные сертификаты размещены в хранилище промежуточных удостоверяющих центров.
Создание и настройка прослушивателя WinRM по протоколу HTTPS
Теперь, когда все сертификаты установлены, пришло время настроить WinRM на вашем сервере для использования этого сертификата для прослушивателя.
С открытой консолью PowerShell на сервере WinRM:
- Запустите нижеследующую команду, чтобы автоматически настроить прослушиватель WinRm. Команда
winrm
выполняет это, выполняя поиск в хранилище сертификатов локальной машины сертификата, который соответствует требованиям для WinRM.
2. Брандмауэр Windows по умолчанию блокирует порт WinRM HTTPS 5986
. Чтобы убедиться, что брандмауэр разрешает входящий порт 5986
, выполните следующую команду PowerShell:
Тестирование соединения WinRM SSL
На этом этапе вы готовы к подключению. Используя ваши любимые cmdlet’ы PSRemoting, такие как Invoke-Command
или Enter-PSSession
, подключитесь к серверу и используйте параметр UseSSL
.
Всегда убедитесь, что значение параметра
ComputerName
точно соответствует общему имени, указанному при создании сертификата. Если вы попытаетесь подключиться к другому имени хоста или, возможно, к IP-адресу хоста, вы получите ошибку несоответствия сертификата, что вызовет сбой соединения.
Настройка аутентификации на основе сертификата
К настоящему моменту у вас уже должен быть настроен прослушиватель WinRM для использования HTTPS. Если это так, вы также можете использовать сертификат аутентификации пользователя для аутентификации как локального пользователя на удаленном сервере. Использование пользовательского сертификата является одним из наиболее безопасных способов, но настройка занимает некоторое время. Вы обнаружите, что это также много повторяющейся работы, так как каждый сертификат уникален для индивидуальной клиентской машины.
Аутентификация на основе сертификата работает только с локальными учетными записями пользователей, а не с учетными записями домена.
Предполагая, что вы запросили сертификат для аутентификации клиента, как описано в разделе Создание запроса на сертификат, читайте дальше:
Включение аутентификации по сертификату и сопоставление пользователя на сервере
- На сервере выполните команду
Set-Item
для разрешения аутентификации на основе сертификата.
2. Затем выполните Get-ChildItem
, чтобы просмотреть хранилище доверенных корневых сертификатов и найти отпечаток пальца ЦС, выдавшего сертификат аутентификации клиента. Для этого отфильтруйте сертификаты по субъекту, который содержит имя вашего ЦС.
3. Запустите следующую команду, где SubjectName
– это субъект сертификата пользователя, который вы указали при создании сертификата
Отпечаток пальца ЦС (CAThumbprint
) – это отпечаток пальца ЦС, полученный с предыдущей командой, а затем предложены учетные данные – имя пользователя и пароль локального пользователя, которые будут использоваться для аутентификации на основе сертификата.
Проверка аутентификации на основе сертификата
Теперь, когда настроено сопоставление сертификата с пользователем, используйте сертификат на клиентской машине для аутентификации без предоставления учетных данных.
На клиенте в PowerShell получите отпечаток пальца клиентского сертификата, посмотрев в хранилище персональных сертификатов.
Теперь укажите отпечаток пальца в параметре CertificateThumbprint
команды PSRemoting, как показано ниже.
Обратите внимание, что поскольку аутентификация на основе сертификатов используется только с HTTPS-прослушивателем, параметр
-UseSSL
подразумевается, в отличие от других методов аутентификации, где нужно указать использование SSL.
Дальнейшие шаги
Теперь, когда вы узнали, как настроить WinRM через SSL, узнайте больше о PSRemoting в нашем посте PowerShell Remoting: The Ultimate Guide!
Хотите узнать больше о PowerShell в общем, включая много информации о PSRemoting? Загляните в PowerShell for Sysadmins, the book!