Механизм восстановления версии протокола SSL / TLS

Я использую Microsoft Crypto API для обработки соединений SSL. При общении с серверами, которые поддерживают TLS 1.0 или выше, все работает нормально, но когда я пытаюсь иметь дело с сервером, который поддерживает только SSL 3.0 InitializeSecurityContext() ошибка с кодом ошибки 0x80090331 (SEC_E_ALGORITHM_MISMATCH).

Я пытался играть с SCHANNEL_CRED структура, которая передается AcquireCredentialsHandle() как pAuthData аргумент. Особенно это поле grbitEnabledProtocols это должно контролировать набор поддерживаемых протоколов. Когда я установил grbitEnabledProtocols=SP_PROT_SSL3все работает нормально, но это нарушает безопасность, потому что я тоже хочу поддерживать TLS 1.0, 1.1 и 1.2, и становится невозможным общаться с серверами, для которых SSL 3.0 отключен по соображениям безопасности.

Итак, проблема в том, что:

Когда я установил grbitEnabledProtocols=SP_PROT_SSL3TLS1_X и попытайтесь установить связь с сервером, который поддерживает только SSL 3.0, подключение начинается как TLS 1.2, затем сервер отвечает заголовком SSL 3.0 и соответствующими данными. Отсюда, согласно RFC, Crypto API должен продолжить процедуру квитирования, используя протокол SSL 3.0, но вместо этого он завершается с ошибкой 0x80090331 (SEC_E_ALGORITHM_MISMATCHклиент и сервер не могут общаться, потому что у них нет общего алгоритма).

Есть ли возможный способ включить TLS 1.0, 1.1, 1.2 вместе с SSL 3.0 в MS Crypto API?

5

Решение

две вещи, которые вы можете сделать как часть отладки.

1> проверьте, есть ли способ указать поддерживаемые протоколы в используемых вами API.

2> попробуйте включить все возможные алгоритмы шифрования и хэширования.

эти две опции доступны в открытом SSL.

лучший способ отладки — использовать wireshark и посмотреть, что именно отправляет код ошибки по протоколу SSL.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector