Если вы хотите узнать, как создать запрос на сертификат IIS, вы пришли по адресу. В этой статье я расскажу, как я сделал это с помощью PowerShell, а также как привязать сертификат к веб-сайту IIS.
Давайте разберемся в одном важном вопросе. Я ненавижу криптографию и сертификаты. За время своей карьеры я был “парнем по сертификатам” несколько раз. Тем не менее, это была просто еще одна роль для системного администратора.
I never got to the point where I completely understood the technology and it seemed like every task I tried to accomplish around that area seemed to never work out. It’s definitely an unforgiving technology for sure.
Позвольте мне рассказать вам историю об автоматизации установки сертификата на сервере IIS с использованием PowerShell.
Миссия
От клиента поступила просьба о предоставлении нового общедоступного сертификата Digicert, его установке на удаленном сервере Windows Server 2012 R2 Core с IIS 8.5 в рабочей группе, установке SSL-привязки к веб-сайту и использовании установленного сертификата для привязки. Просто, верно? ЛОЛ!
Как это делается, сын!
Вкратце, для этого потребуется X шагов.
- Создайте запрос на сертификат IIS на компьютере, где будет установлен сертификат. В моем случае у меня был доступ только через WinRM, поэтому мне пришлось выполнить certreq.exe на удаленном сервере с использованием
Invoke-Command
и отправить содержимое CSR в локальный файл. - Получите CSR, подписанный общедоступным Центром сертификации. (Здесь нет помощи – красивый сертификат только что вернулся от службы безопасности, с которой я работал). В моем случае команда безопасности предоставила мне набор сертификатов P7B, объединенных в файл .CER, который включал искомый мной сертификат, а также промежуточные сертификаты. Это потребовало некоторой настройки, чтобы заработать.
- Завершите запрос на подпись сертификата на компьютере, где будет установлен сертификат. Это поможет добавить сертификат в хранилище сертификатов.
- Создайте привязку SSL IIS на сервере.
- Присоедините сертификат к этой привязке.
Генерация запроса на сертификат IIS
Ваше первое задание – запустить certreq.exe с этим сценарием PowerShell IIS на удаленном сервере, чтобы собрать файл запроса. Для этого certreq.exe требуется файл INF в качестве входных данных. Этот файл используется для всех различных параметров, которые у вас будут у сертификата. Не вдаваясь в подробности, это копия файла INF, который я использовал.
В функции New-CertificateSigningRequest
вы увидите, что я делаю настройку этого очень простой. Фактически, если вы используете мои функции, вы даже не увидите этот файл, так как он нужен только временно для создания CSR (файла запроса).
Затем вам нужно передать этот файл INF на удаленный сервер и выполнить certreq.exe с параметрами, подобными certreq.exe -new "$InfFilePath" "$reqFilePath"
.
Это создаст CSR (файл запроса) на удаленном компьютере. Затем вам нужно отправить этот файл своей службе безопасности. Это также создаст сертификат, содержащий как закрытый, так и открытый ключи, в Запросах на выдачу сертификата в контексте локальной машины.

Завершение запроса сертификата IIS
В моем случае я получил один файл CER. Я создал функцию в этом сценарии PowerShell IIS, чтобы просто импортировать его непосредственно в хранилище Личных данных в контексте локальной машины, чтобы обнаружить, что IIS не мог его увидеть. Причина заключалась в том, что сертификат также должен был содержать закрытый ключ. Простое импортирование сертификата в хранилище Личных данных не сработало. Мне пришлось завершить запрос сертификата, используя certreq.exe.
Для этого вам нужно скопировать сертификат, который вы получите от вашей службы безопасности, на удаленный сервер, а затем выполнить certreq.exe таким образом certreq.exe -accept -machine "C:\issuedcert.cer"
.
Всегда убедитесь, что ответный сертификат всегда помещается в контекст локальной машины с помощью параметра -machine
. Это должно успешно завершиться согласно всему, что я прочитал, но определенно не у меня. По какой-то причине я получал ошибку, которая выглядела примерно так:

Оказалось, что это означает, что открытый ключ в файле запроса не совпадает с тем, что вернула служба безопасности. Чтобы проверить это, просто запустите certutil.exe -dump requestfile.req
и certutil -dumpissuedcert.cer
. Прокрутите вниз вывод, пока не увидите область открытого ключа.

Скопируйте каждый из этих закрытых ключей и сравните их в текстовом редакторе, чтобы убедиться, что они одинаковы. Если нет, обратитесь к вашей службе безопасности за тем, что они неправильно подписали ваш запрос!
Если они совпадают, вы в порядке, и вы не должны получать эту ошибку.
Создайте привязку SSL
На удаленном сервере выполните:
Прикрепите сертификат к привязке SSL
На удаленном сервере выполните:
Получите сценарий PowerShell для IIS
Если все идет хорошо, вы закончили! Теперь, если вам нужна небольшая помощь в этом, я создал три функции, чтобы сделать это намного проще. Загляните в мой репозиторий на Github, чтобы получить функции:
https://github.com/adbertram/Random-PowerShell-Work/tree/master/Certificates
https://github.com/adbertram/Random-PowerShell-Work/tree/master/IIS
Пример кода
Связанные материалы
Обязательно посмотрите другие записи блога ATA по управлению IIS с использованием PowerShell
Source:
https://adamtheautomator.com/iis-certificate-request/