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

Центральное хранилище сертификатов IIS и SNI

Я пытаюсь получить 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, или получить доступ к самому местоположению магазина.