SSPI Schannel API - Как составить список возможностей сервера и параметров текущего соединения? - PullRequest
0 голосов
/ 14 апреля 2020

Код, который я использую, использует вызовы SSPI WinAPI для установления sh соединений TLS. Вызовы InitializeSecurityContext, AcceptSecurityContext, SetContextAttributes и т. Д. c.

Мне нужно получить две вещи:

  • , какие версии TLS или SSL сервер, к которому я подключен, поддерживает?
  • какая версия TLS или SSL использовалась в этом / текущем / существующем соединении?
  • в качестве бонуса ( приятно иметь, но не обязательно), какие шифры, ха sh функции и обмен ключами были использованы?

Чтение документации MSDN Я нашел функцию QueryContextAttributes и, передав текущий дескриптор контекста и атрибут SECPKG_ATTR_CONNECTION_INFO Я могу получить структуру SecPkgContext_ConnectionInfo, которая заполнена шифрами, алгоритмами Ха sh и т. д. c. Он также должен возвращать «Протокол, используемый для установления sh этого соединения» в dwProtocol переменной-члене, как описано в MSDN: https://docs.microsoft.com/en-us/windows/win32/api/schannel/ns-schannel-secpkgcontext_connectioninfo

Но при вызове он возвращает только SP_PROT_TLS1_1_CLIENT а не SP_PROT_TLS1_1_SERVER. Итак, как мне проверить версию TLS текущего соединения? Чтобы проверить, является ли это TLS v1.1, мне нужно сравнить значения const клиента и сервера? Действительно ли они указывают на текущее соединение?

И какой вызов API используется для получения возможностей сервера?

Я буду ценить любые подсказки или примеры кода ... все, что может указать мне на правильное направление.

...