Я пытаюсь получить IIS 8.5 на Windows Server 2012 R2, чтобы фактически использовать центральное хранилище сертификатов, но я не могу этого понять.
У меня есть два экземпляра настройки IIS с использованием общей конфигурации и NLB, они будут действовать как обратные прокси-серверы внешнего интерфейса (это работает). Я хочу добавить к ним завершение SSL, вот где у меня проблемы.
Я установил центральное хранилище сертификатов. Я пробовал использовать подстановочные знаки и специальные сертификаты для доменов. Я пробовал добавлять явные привязки для сертификатов. Я пробовал редактировать привязки в applicationathost.config, чтобы не было определенного домена (из поисков Google).
Без сайта SSL по умолчанию IIS отправляет соединение RST (проверяется с помощью wirehark). С сайтом SSL по умолчанию IIS отказывается от всего, используя какой бы то ни было сертификат, он не беспокоится о части SNI и не просматривает центральное хранилище сертификатов.
Есть ли способ отладки IIS относительно того, какие решения он принимает? Я вижу сертификаты, загруженные в центральное хранилище сертификатов, но они никогда не используются.
Вот результаты netsh http show sslcert
IP:port : 0.0.0.0:443
Certificate Hash : 223ee4d18cd634a3227a492de0f50665120a3554
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
IP:port : 0.0.0.0:8172
Certificate Hash : 223ee4d18cd634a3227a492de0f50665120a3554
Application ID : {00000000-0000-0000-0000-000000000000}
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
Central Certificate Store : 443
Certificate Hash : (null)
Application ID : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name : (null)
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
Что сбивает с толку, так это то, что первая привязка имеет имя хоста, но другие хосты подписываются с этим сертификатом, это никогда не сработает, потому что CN / FQDN всегда будет неправильным, поэтому я понятия не имею, почему IIS делает это.
Если я пойду по этому блогу Вот, в нем подробно описано, как HTTP.sys принимает решения. В частности, в разделе «Как работает CCS» описано, что привязка IP: Port имеет приоритет.
Итак, чтобы выяснить, почему сертификат управления отображается, даже если привязка имеет имя хоста: это связано с тем, что ваша привязка по умолчанию не использует SNI. Когда SNI не используется, решение о выборе сертификата, который будет отправлен клиенту, будет приниматься через IP-адрес и порт уровня TCP / IP. Если рукопожатие прошло успешно, необходимо прочитать заголовок HTTP Host, чтобы определить, к какой привязке веб-сайта принадлежит запрос.
В блоге также предполагается, что CCS работает на основе имен файлов. Например: имя хоста генерирует имя файла, например hostname.pfx. Сказав это, я бы рекомендовал удалить эту привязку по умолчанию и запустить Process Monitor. Это даст вам представление о том, проверяет ли HTTP.sys местоположение хранилища CCS на предмет определенного имени файла. Если это так, вы можете соответствующим образом переименовать файл pfx, настроить разрешения, если это проблема с разрешениями, или исправить любой пароль, указанный для файлов pfx, или получить доступ к самому местоположению магазина.