Код, который я использую, использует вызовы 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 используется для получения возможностей сервера?
Я буду ценить любые подсказки или примеры кода ... все, что может указать мне на правильное направление.