Мне удалось использовать Windows функции Schannel AcquireCredentialsHandle
и AcceptSecurityContext
для получения TLS-соединений от клиентов. Соединения обрабатываются хорошо, пока я инициализирую только структуру SCHANNEL_CRED
с помощью одного сертификата сервера.
Теперь я пытаюсь инициализировать SCHANNEL_CRED
- или, возможно, более новый SCH_CREDENTIALS
- в таком способ указать несколько сертификатов сервера для разных имен DNS. Я хотел бы, чтобы Schannel выбрал правильный на основе SNI клиента.
Я использовал openssl s_client
, чтобы убедиться, что клиент действительно отправляет SNI. Однако, когда я настраиваю несколько сертификатов в SCHANNEL_CRED
, Schannel просто отправляет первый сертификат клиенту, без учета имени DNS в SNI клиента.
Каждый индивидуальный сертификат работает нормально, если я инициализирую SCHANNEL_CRED
только с одним.
Я пробовал включить флаг SCH_CRED_SNI_CREDENTIAL
, который определен в schannel.h
, но не задокументирован ни на веб-сайте Microsoft, ни в schannel.h
. Включение этого, похоже, не повлияло на эту проблему.
Каков правильный способ вызвать AcquireCredentialsHandle
для Schannel на стороне сервера, чтобы Schannel использовал несколько сертификатов для SNI?