IIS 7 все еще обслуживает старый сертификат SSL


27

Я установил новый сертификат SSL в IIS7, удалил старый сертификат и установил привязки для нового сертификата - так что теперь https привязан только к новому сертификату.

Я перезапустил IIS7 (и сам Windows 2008 Server) и проверил сертификат с помощью команд:

netsh http show sslcert

Это показал новый сертификат только, как я ожидал

certutil -store MY

Это также показало только новый сертификат, а не старый, как я ожидал

Я также открыл mmc и проверил там сертификаты, и я вижу только новый, а не старый.

Я также использую учетную запись с правами администратора.

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

Может кто-нибудь помочь мне понять, где я иду не так? Как я могу изгнать старый призрачный сертификат?

Ответы:


28

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

  • Я пытался обновить сертификат, потому что срок его действия истек.
  • У меня есть несколько доменов, привязанных к одному и тому же IP. Это сертификат SAN, но это, вероятно, не имеет значения.
  • Я пытался использовать централизованное хранилище сертификатов. Опять же я думаю, что это не имеет отношения к большей части моего ответа.
  • Я уже пытался обновить сертификат, но он не отображал новую дату.
  • Возможно, вы сейчас в панике, если срок действия вашего старого сертификата уже истек. Сделай глубокий вдох ...

Во-первых, я бы настоятельно рекомендовал зайти https://www.digicert.com/help/и загрузить их инструмент DigiCert. Вы также можете использовать его онлайн.

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

Если вы используете централизованное хранилище сертификатов, вы должны быть на 100% уверены, что файл .pfx является последней версией, поэтому перейдите в каталог вашего хранилища и выполните следующую команду:

C:\WEBSITES\SSL> certutil -dump www.example.com.pfx

Это покажет вам дату истечения срока действия и хэш / отпечаток. Очевидно, что если эта дата истечения срока действия неверна, вы, вероятно, просто экспортировали неправильный сертификат в файловую систему, поэтому сначала исправьте это.

Если вы используете CCS, то при условии, что эта команда certutil дает ожидаемую дату истечения срока действия (вашего обновленного сертификата), вы можете продолжить.

Запустите команду:

netsh http show sslcert > c:\temp\certlog.txt
notepad c:\temp\certlog.txt

Скорее всего, у вас есть много вещей, поэтому проще открыть их в текстовом редакторе.

Вы захотите найти в этом файле НЕДОСТАТОЧНЫЙ хеш, который вы получили digicert.com(или отпечаток, полученный от Chrome).

Для меня это привело к следующему. Вы увидите, что он привязан к IP, а не к моему ожидаемому доменному имени. Это проблема. Кажется, что это (по какой-то причине я не уверен) имеет приоритет над набором привязок в IIS, для которого я только что обновил example.com.

IP:port                      : 10.0.0.1:443
Certificate Hash             : d4a17e3b57e48c1166f18394a819edf770459ac8
Application ID               : {4dc3e181-e14b-4a21-b022-59fc669b0914}
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

Я даже не знаю, откуда взялась эта привязка - у меня даже нет привязок SSL на моем сайте по умолчанию, но этому серверу несколько лет, и я думаю, что что-то просто испортилось и застряло.

Итак, вы хотите удалить его.

Чтобы быть в безопасности, сначала нужно выполнить следующую команду, чтобы убедиться, что вы удаляете только один элемент:

C:\Windows\system32>netsh http show sslcert ipport=10.0.0.1:443

SSL Certificate bindings:
-------------------------

IP:port                      : 10.0.0.1:443
Certificate Hash             : d4a17e3b57e48c1166f18394a819edf770459ac8
Application ID               : {4dc3e181-e14b-4a21-b022-59fc669b0914}
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

Теперь мы убедились, что это «плохой» отпечаток, и ожидаем одну запись, которую мы можем удалить с помощью этой команды:

C:\Windows\system32>netsh http delete sslcert ipport=10.0.0.1:443

SSL Certificate successfully deleted

Надеемся, что если вы сейчас вернетесь к Digicert и еще раз выполните команду, она даст вам ожидаемый отпечаток сертификата. Вы должны проверить все имена SAN, если у вас есть, чтобы быть уверенным.

Наверное, хочу IISRESET здесь, чтобы не было никаких сюрпризов позже.

Последнее замечание: если вы используете централизованное хранилище сертификатов и видите странное поведение, пытаясь даже определить, берет ли он ваш сертификат оттуда или нет, не беспокойтесь - это не ваша вина. Иногда кажется, что сразу же появляются новые файлы, но кешируются старые. Открытие и восстановление привязки SSL после внесения каких-либо изменений, кажется, сбрасывает ее, но не в 100% случаев.

Удачи :-)


3
Вы Симон среди Симонов. В нашем случае оказалось, что наш сервер «кэшировал» сертификат с истекшим сроком действия, [::1]:443тогда как обновление сертификата в IIS только обновило запись для 0.0.0.0:443. Спасибо!
tuespetre

1
Это решило мою проблему с несколькими доменами на одном IP; не использует централизованный магазин сертификатов.
Крис Ф. Кэрролл

1
Я должен был использовать это несколько раз. Программное обеспечение для управления веб-хостингом PLESK иногда портит привязки сертификатов, и мне в конечном итоге понадобились вышеуказанные команды netsh для удаления ошибочной привязки. Не уверен, какие версии затронуты, но я использую текущую версию PLESK Onyx на Windows Server 2016.
BenSwayne

В моем случае это было по имени хоста и порту. Таким образом, для фильтрации и удаления по имени хоста команды должны быть следующими: «netsh http show sslcert hostnameport = www.example.com: 443» и «netsh http delete sslcert hostnameport = www.example.com: 443»
Картик Джаяпал

14

Проверьте сертификат, который привязан к сайту в IIS. Вы можете щелкнуть правой кнопкой мыши на сайте и выбрать редактировать привязки. Там вы должны увидеть привязку для порта 443, который связан с сертификатом SSL. Это все еще может указывать на старый.


Я проверил, и сертификат в привязках для порта 443 - это новый сертификат, а не старый. Спасибо за ваше предложение.
Joechip

1
Странно, у меня никогда такого не было. Хотя я никогда не удаляю старые сертификаты. Как вы уверены, что вы все еще получаете старый сертификат? Это показывает, что срок годности истек?
Татас

Да, в браузере вы можете проверить данные сертификата (срок действия и т. Д.) И его старый, который обслуживает IIS7.
Joechip

1
Я видел это с - Chrome. Chrome кеширует старый сертификат и показывает его пользователю.
TomTom

3

Я просто решил это. Сервер фактически находился за ISA-сервером, поэтому нам также пришлось установить новый сертификат SSL на ISA-сервер.


3

У меня была та же проблема, и я проверил привязки. У меня было установлено 2 приложения в IIS, одно использовало новый сертификат, одно использовало старый.

Чтобы исправить, мне пришлось полностью удалить сертификат с сервера (затем, возможно, перезагрузить компьютер).

В диспетчере IIS -> (значок корня дерева IIS) -> Сертификаты сервера выберите старый сертификат и нажмите «Удалить» на панели «Действия».


1
Точно так же у нас фактически был дополнительный ОСТАНОВЛЕННЫЙ сайт, который ссылался на старый сертификат, и как только мы обновили этот сайт, чтобы использовать новый, реальный сайт начал показывать новый сертификат!
Действие Дан

1

Я испытал это во время обновления IPv6. У меня был IIS, обеспечивающий перенаправление на случай, если кто-то попытается получить доступ к сервису через HTTP, который на самом деле не был основан на веб-сервере. Я обновил фактическую службу (голосовой сервер), чтобы она была IPv6, однако мне не удалось обновить привязки для перенаправления, чтобы включить адреса IPv6.

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


0

В случае, если кто-то все еще сталкивается с этой проблемой. Моя была решена, перейдя в

C:\inetpub\wwwroot

Затем вы найдете файл web.config, откройте его с помощью блокнота и удалите строку с

<httpRedirect enabled="true" destination="http://foo.company.org" />

Сохраните и попробуйте снова получить доступ к локальному или корневому сайту вашего IIS-сервера.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.