Назад | Перейти на главную страницу

Замена подстановочного сертификата сразу на нескольких сайтах (с помощью командной строки) в IIS 7.5

У меня 3 сайта: aaa.my-domain.com, bbb.my-domain.com и ccc.my-domain.com все с использованием одного подстановочного сертификата *.my-domain.com на IIS 7.5 Windows Server 2008R2 64-разрядная. Срок действия этого сертификата истекает через месяц, и у меня есть новый подстановочный сертификат. *.my-domain.com на моем сервере готово.

Я хочу, чтобы все эти домены использовали новый групповой сертификат без заметных простоев.

Я пробовал обычным способом через пользовательский интерфейс, начиная с замены сертификата на aaa.my-domain.com:

Но когда я нажимаю ОК, я получаю следующую ошибку:

--------------------------- Редактировать привязку сайта -------------------- -------

По крайней мере, еще один сайт использует ту же привязку HTTPS, и привязка настроена с другим сертификатом. Вы уверены, что хотите повторно использовать эту привязку HTTPS и переназначить другой сайт или сайты для использования нового сертификата?

--------------------------- Да нет --------------------- ------

Когда я нажимаю да, Я получаю следующее сообщение:

--------------------------- Редактировать привязку сайта -------------------- -------

Сертификат, связанный с этой привязкой, также назначается привязке другого сайта. Редактирование этой привязки приведет к невозможности использования привязки HTTPS другого сайта. Вы все еще хотите продолжить?

--------------------------- Да нет --------------------- ------

Это сообщение говорит мне, что https://bbb.my-domain.com и https://ccc.my-domain.com придет в негодность. И у меня будет время простоя, по крайней мере, до тех пор, пока я не заменю сертификат для этих двух доменов, верно?

Я думал, что должен быть более разумный способ сделать это. Возможно, через командную строку, которая заменяет групповой сертификат на новый сразу для всего сайта. Я не мог найти в Интернете ресурсов о том, как это сделать. Любые идеи?

Сайты, связанные с подстановочными знаками и привязками:

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

Контекст ответа состоит в том, что IIS 7 на самом деле не заботится о привязке сертификата. IIS 7 связывает веб-сайты только с одним или несколькими сокетами. Каждый сокет представляет собой комбинацию IP + порт. Источник: IIS7 добавить сертификат на сайт из командной строки

Итак, что мы хотим сделать, это выполнить повторную привязку сертификата на уровне ОС. Уровень ОС берет на себя управление частью SSL, поэтому вы используете netsh чтобы связать сертификат с конкретным сокетом. Это делается через netsh с помощью netsh http add sslcert.

Когда мы привязываем (новый) сертификат к сокету (ip + порт), все сайты, использующие этот сокет, будут использовать новый сертификат.

Команда для привязки сертификата к сокету: netsh http add sslcert ipport=10.100.0.12:443 certhash=1234567890123456789012345678901234567890 appid={12345678-1234-1234-1234-999999999999}

Как

В этой части объясняется, как действовать, шаг за шагом. Предполагается, что у вас есть веб-сайты (aaa.my-domain.com, bbb.my-domain.com) с сертификатом * .my-domain.com, срок действия которого истекает. У вас уже есть новый сертификат, который вы уже установили на сервере, но еще не применили к веб-сайтам в IIS..

Во-первых, нам нужно выяснить 2 вещи. Certhash вашего нового сертификата и appid.

  • certhash Задает хэш SHA сертификата. Этот хэш имеет длину 20 байт и задан как шестнадцатеричная строка.
  • appid Задает GUID для идентификации приложения-владельца, которым является сам IIS.

Найдите сертификат

Выполнить certutil команда для получения всех сертификатов на машине:

certutil -store My

Мне не нужна вся информация, поэтому мне нужно:

certutil -store My | findstr /R "sha1 my-domain.com ===="

Среди выходных данных вы должны найти готовый новый сертификат на вашем сервере:

================ Certificate 5 ================ Subject: CN=*.my-domain.com, OU=PositiveSSL Wildcard, OU=Domain Control Validated Cert Hash(sha1): 12 34 56 78 90 12 34 56 78 90 12 34 56 78 90 12 34 56 78 90

1234567890123456789012345678901234567890 это certhash мы искали. это Cert Hash (sha1) без пробелов.

Найдите приложение

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

netsh http show sslcert

Или, в частности, одну розетку

netsh http show sslcert ipport=10.100.0.12:443

Вывод:

SSL Certificate bindings:
----------------------
IP:port                 : 10.100.0.12:443
Certificate Hash        : 1111111111111111111111111111111111111111
Application ID          : {12345678-1234-1234-1234-123456789012}
Certificate Store Name  : MY
Verify Client Certificate Revocation    : Enabled
Verify Revocation Using Cached Client Certificate Only    : Disabled
Usage Check    : Enabled
Revocation Freshness Time : 0
URL Retrieval Timeout   : 0
Ctl Identifier          : (null)
Ctl Store Name          : (null)
DS Mapper Usage    : Disabled
Negotiate Client Certificate    : Disabled

{12345678-1234-1234-1234-123456789012} это appid мы искали. Это идентификатор приложения самого IIS. Здесь вы видите розетку 10.100.0.12:443 в настоящее время все еще привязан к старому сертификату (хэш 111111111 ...)

привязать (новый) сертификат к сокету

Откройте командную строку и запустите ее от имени администратора. Если вы не запустите его как администратор, вы получите сообщение об ошибке: «Запрошенная операция требует повышения прав (запуск от имени администратора)».

Сначала удалите текущую привязку сокета сертификата с помощью этой команды

netsh http delete sslcert ipport=10.100.0.12:443

У вас должно получиться:

SSL Certificate successfully deleted

Затем используйте эту команду (найдено Вот), чтобы добавить новую привязку сокета сертификата с appid и certhash (без пробелов), которые вы нашли ранее с помощью этой команды

netsh http add sslcert ipport=10.100.0.12:443 certhash=1234567890123456789012345678901234567890 appid={12345678-1234-1234-1234-123456789012}

У вас должно получиться:

SSL Certificate successfully added

СДЕЛАНО. Вы только что заменили сертификаты всех сайтов, привязанных к этому IP + порту (сокету).