Windows Канал, на стороне сервера: как использовать AcquireCredentialsHandle с несколькими сертификатами для SNI? - PullRequest
0 голосов
/ 13 июля 2020

Мне удалось использовать 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?

...