IIS обслуживает неверный сертификат localhost

Хорошо, у меня проблема с SSL, которую я не могу решить на этой машине с 1 Win7 x64. Я использую самоподписанные сертификаты в течение многих лет и даже раньше писал о них в блогах, так что у меня есть опыт. Однако что-то происходит, чего я не могу понять на этот раз.

У меня есть (2) сертификата SSL localhost, созданные и установленные на моем компьютере.

  1. localhost (понятное имя) создается и создается в IIS (7.5). Он содержит значения «Кому выдан» и «Кем выдан» имени моей машины: «DevMachine123». Это сертификат, обслуживаемый приложениями, настроенными на «Веб-сайте по умолчанию» в IIS.
  2. SSL-сертификат localhost, созданный с помощью инструмента makecert.exe, где использовался CN = localhost (обычное имя). Он содержит значения «Кому выдан» и «Кем выдан» для «localhost». Это сертификат SSL, который я хочу обслуживать в IIS для моих приложений, настроенных в разделе "Веб-сайт по умолчанию".

Я получаю следующую ошибку:

«Сертификат безопасности, представленный этим веб-сайтом, был выдан для другого адреса веб-сайта».

Когда я просматриваю сертификат, обслуживаемый браузером IE: он показывает, что сертификат localhost, выданный DevMachine123, используется, а не локальный хост, выданный localhost (# 2 выше), что должно решить эту проблему. . Отсюда и несоответствие имен, потому что DevMachine123 не соответствует localhost.

Еще одно замечание; мои сертификаты добавлены в «Доверенные корневые центры сертификации», поэтому они оба являются доверенными сертификатами.

Напоследок я проверил конфигурацию привязки https-порта 443 для «Веб-сайта по умолчанию» на моем компьютере в IIS. Я просматриваю сертификат, и он показывает, что привязан правильный сертификат localhost (№2 выше с CN = localhost).

Я чувствую, что рассмотрел здесь свои основы (да, я видел this и this, так что сделайте не перепост). Что мне здесь не хватает?

Спасибо!


person atconway    schedule 12.10.2012    source источник


Ответы (4)


У меня была аналогичная проблема, и я также прошел упомянутые выше проверки привязок к сайту. Я выполнил следующую команду netsh

netsh http show sslcert

Это показало мне две привязки сертификатов SSL. Один на IP: порт 0.0.0.0:443 с правильным сертификатом и один на IP: Порт [::]: 443 с истекшим сертификатом. Я открыл CertMgr.msc для локального компьютера (см. здесь для получения инструкций), поискал недействительный сертификат и обнаружил, что срок его действия истек.

Чтобы решить проблему, я сделал следующее

  1. netsh http delete sslcert ipport=[::]:443
  2. iisreset /restart
person IsolatedStorage    schedule 26.11.2012
comment
Если бы мог, я бы поставил вам за это около 10 баллов. Некоторые ответы очень полезны. Раньше я использовал утилиту netsh.exe, но никогда не думал ее попробовать. Это сработало! Спасибо! - person atconway; 06.12.2012
comment
Я случайно удалил сертификат localhost, выданный доверенным центром. Тот, который я не создавал ... есть ли способ вызвать воссоздание этого сертификата? - person hal9000; 04.06.2013
comment
Hal - если у вас есть другой компьютер с таким же сертификатом, вы можете экспортировать его с этого компьютера, скопировать на свой, а затем импортировать. - person IsolatedStorage; 19.08.2013
comment
Была такая же проблема, и это было решение! - person Siim Nelis; 18.03.2014
comment
Я даже не могу описать, какое облегчение вы только что принесли мне после того, как часами боролись с IIS за избавление от поддельного сертификата. Большое спасибо. - person Alex Marshall; 21.03.2015
comment
Такой отличный совет !! Работал у меня. Как начальник! - person sshirley; 24.06.2016
comment
Спасибо! Спас мой / наш день! Еще одна неудача для администрирования на основе графического интерфейса. - person Trygve; 12.10.2017
comment
Большое спасибо ... Моя претензия к IIS, плохая документация. если у вас несколько сайтов, как у меня, очень сложно понять, что не так. У меня 10 веб-сайтов с SSL, все настроено правильно, но только один сайт работал правильно. поэтому, когда я сделал netsh http show sslcert, у меня был длинный список сертификатов, но я заметил там один листинг, к которому не было привязано ни одного сайта, только IP, выглядело как IP: Порт: ‹IP-адрес›, поэтому я запустил delete netsh http delete sslcert ipport=<ipAddress>:443 и вуаля все снова работал после перезапуска. - person PBo; 31.03.2021

Очень похожий ответ на @IsolatedStorage, но с более подробной информацией о том, что мне помогло.

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

  • Я пытался обновить сертификат, потому что срок его действия истек.
  • У меня несколько доменов, привязанных к одному 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% случаев.

Удачи :-)

person Simon_Weaver    schedule 08.04.2016
comment
спасибо за предложение digicert.com, он показал мне, что мой сертификат отправляется правильно - person Les; 07.07.2016
comment
Спасибо! Спас мой / наш день! Еще одна неудача для администрирования на основе графического интерфейса. Этот ответ был на высоте - person Trygve; 12.10.2017
comment
@Trygve IIS наверняка содержит несколько серьезных ошибок. Трудно поверить. - person Simon_Weaver; 12.10.2017
comment
Была очень похожая проблема с сертификатом в моем магазине для IP-адреса сервера и обслуживанием неправильного (старого) сертификата. Было бы здорово узнать, как / почему / когда был создан этот сертификат! - person mgrollins; 06.12.2018
comment
PS. С тех пор я переключился на Cloudflare перед моими сайтами, что значительно упрощает (и расширяет) обработку HTTPS. Времена борьбы со старыми глючными IIS прошли (если ваша ситуация позволяет это). - person Simon_Weaver; 07.01.2020
comment
ЭТО СЛУЧИЛОСЬ ОПЯТЬ! ТАК БЕЗУСЛОВНО - person Simon_Weaver; 27.05.2020

Те же симптомы

Изменена привязка HTTPS в выпадающем списке к IP-адресу сервера (в диалоге привязки сайта). Было установлено значение «все не назначено». Получено предупреждение о перезаписи существующей комбинации сертификата и IP-адреса, которую я принял, и проблема решена.

person Matt Evans    schedule 19.05.2014

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

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

person j8048188    schedule 05.11.2018