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

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

У меня есть (2) локальные SSL-сертификаты, созданные и заблокированные на моей машине.

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

Ошибка, которую я получаю:

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

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

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

Последнее, что нужно сделать, я проверил настройку привязки https port 443 для "Default Web Site" на моей машине в IIS. Я просматриваю сертификат, и он показывает, что правильный сертификат localhost связан (# 2 выше с CN = localhost).

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

Спасибо!

Ответ 1

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

netsh http show sslcert

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

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

  • netsh http delete sslcert ipport=[::]:443
  • iisreset /restart

Ответ 2

Очень похожий ответ на @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

У вас, вероятно, есть много вещей, чтобы было легче открыть его в текстовом редакторе.

Вы хотите найти этот файл для хеша WRONG, который вы получили от 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 после внесения каких-либо изменений, похоже, reset, но не в 100% случаев.

Удачи: -)

Ответ 3

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

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