Создание сертификата SSL на несколько имен для сервера IIS

Иногда требуется для сервера IIS создать цифровой сертификат для нескольких доменных имен.

Пример такого требования:  сертификат для сервера Exchange, сертификат для корпоративного портала (SharePoint).

Для Exchange 2007 или Exchange 2010 проблем нет — сертификат включающий в себя несколько доменных имен можно создать через оснастку PowerShell. Проблемы начинаются, когда требуется создать сертификат просто для IIS, или для Exchange 2003.

Поясню суть проблемы.

Для чего нужны сертификаты? Они нужны для работы web-сайта по SSL (то есть когда заходим на сайт https://). В сертификате зафиксировано имя сервера, которому он выдан, при попытке обратиться к сайту не по тому имени, которое прописано в сертификате, браузер выдает ошибку безопасности.

Для одного имени сертификат создать просто: запускаем оснастку управления IIS и делаем запрос на сертификат корневому центру сертификации.

Казалось бы, выписали сертификат, установили его и все хорошо. Дело в том, что если сайт виден и из интернета, и из локальной сети, то возможны проблемы из за того что имена сайта различаются.

Пример:

Имя сайта в интернета https://mymegasait.ru (имя mymegasait.ru)
Имя сервера (в сети) portal
Полное FQDN имя DNS для этого сервера в сети https://portal.firma.local (сервер portal.firma.local)
Сервер является членом домена firma.local

На нашем гипотетическом сервере расположен корпоративный портал. Выписав сертификат для имени сайта в интернете:

https://mymegasait.ru

вы получите ошибку при доступе на сайт со стороны локальной сети:

https://portal.firma.local

Стандартно выписать сертификат с помощью оснастки IIS у вас не получится. Не получится выписать так же сертификаты mymegasait.ru и www.mymegasait.ru — для сертификатов это два разных имени.

Некоторые ставят знак «*» в имя сертификата:

*.mymegasait.ru

Хитрый ход, но то что хорошо для MS-DOS плохо для сертификата. Знак «*» не является замещающим 😉

На помощь приходит такая вещь, как Subject Alternative Name – специальное поле в сертификате, которое содержит набор имен, соответствующих данному сертификату.

Для того, чтобы выдать серверу такой сертификат, необходимо произвести настройку служб Certification Authority, разрешив ей выдавать сертификаты, содержащие поля SAN.

ВАЖНО:

Если этого не сделать, то поля SAN из запроса будут проигнорированы, и сертификат будет привязан лишь к полю CN (Common Name).

Для разрешения выдачи сертификатов с полем SAN необходимо запустить на компьютере, содержащем службу Certification Authority, следующую команду:

certutil -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2

Делается через командную строку:

Важные замечания:

  1. Вы должны обладать правами «Администратор» (на скиншоте видно, что запускали под учетной записью Administrator )
  2. Можно запускать только на Enterprise Root CA
  3. Про непроверенным мною данным, установлен CA (Certification Authority) должен быть на версии Windows 2003 Enterprise (есть мнение, что версия Standart не подойдет)
  4. Делается это один раз на CA.

После выполнения команды нужно перезапустить службу Certification Authority. Проще всего сделать это сразу из командной строки:

net stop certsvc
net start certsvc

После этого можно формировать запрос на сертификат, например, открыв Certificate Web Enrollment и создав запрос на сертификат шаблона Web Server.

Для этого открываем WWW консоль доступа к вашему CA :

https://DC-server.firma.local/certsrv

( тут DC-server — имя контроллера домена, на котором расположен CA. Как правило, их ставят на один из контроллеров домена)

Заходим под учетной записью обладающей правами «Администратор» (например, администратор домена).

Заходим на Request a certificate:

Далее выбираем «advance certificate request»:

Далее «create and submit a request to this CA»:

Для запроса сертификата для Веб-Сервера заполняем поля согласно этому скрину:

В поле Attributes: запроса необходимо указать DNS-имена сайтов, к которым будет относиться данный сертификат, в следующем виде:

san:dns=mymegasait.ru&dns=portal&dns=portal.firma.local

ВАЖНО:

san:dns=mymegasait.ru

На первом месте обязательно должно стоять основное имя субъекта!!!

Отправляем запрос на сервер кнопкой Submit, и получаем требуемый сертификат.

С установкой, думаю, проблем не будет.

Один комментарий

  1. Добрый день
    Спасиб за статью
    А можно те же операции в Certificate Web Enrollment сделать в powershell??!
    Если можно плиз пример или через что сделать, куда копать!
    Сделал через wasp))) имитирует клик кнопки по заданным href веб страницы, интересно но чет сбоит))))

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

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