2014-01-14 4 views
5

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

Я попытался сыграть с 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?

ответ

0

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

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

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

Эти два варианта доступны в открытом SSL.

Лучший способ - отлаживать - использовать wirehark и искать то, что именно посылает код протокола ошибки.

+0

1> Я попытался указать протоколы, и это подробно описано в вопросе. Вы читали часть включенных grbitEnabledProtocols? Это место, где нужно указывать поддерживаемые протоколы. 2> Я включил все протоколы и шифры, но это не сработало. Я обнаружил, что OpenSSL имеет ту же проблему, по крайней мере, есть поток с тем же вопросом: http://openssl.6102.n7.nabble.com/Need-inputs-suggestions-on-SSL-TLS-protocol-version -fallback-механизм-td25597.html –