C # HttpWebRequest проверить / указать, какой шифр использовался - PullRequest
1 голос
/ 15 марта 2019

Я работаю над приложением .NET 4.0, которое должно подключаться к серверу веб-сайта.Периодически я получал и включал следующую ошибку (шаблон, кажется, запускается около обеда и происходит в кластерах): «Базовое соединение было закрыто. При отправке произошла непредвиденная ошибка».Все, что я видел относительно этой ошибки, указывает мне на ошибку TLS.Я использовал SSLLabs, чтобы определить, что удаленный сервер использует TLS 1.1 и TLS 1.2, но без нескольких доступных шифров.Я подозреваю, что соединение, создаваемое приложением, иногда пытается использовать шифр, который не поддерживается, и эта ошибка встречается.

Из-за чувствительности производственной среды и полу-случайностиВремя этой ошибки, я не могу запустить тест Wireshark или Fiddler на сервере, чтобы определить, какой шифр используется во время сбоев.Однако я проверил, что приложение использует TLS 1.2.

Есть ли какой-либо способ программно получить доступ к из приложения , какие шифры используются объектом HttpWebRequest илиЕсть ли способ указать из приложения , какой шифр использовать?

1 Ответ

0 голосов
/ 15 марта 2019

У меня была похожая проблема несколько месяцев назад, и я помню, как где-то читал, что согласование набора шифров выполняется ОС (Schannel в случае Windows), я не смог найти способ контролировать это изнутри .NET Framework.

Следующие статьи были полезны для меня, чтобы лучше понять поведение платформы .NET вокруг этого (которая отличается в разных версиях).

Рекомендации по обеспечению безопасности транспортного уровня (TLS) с использованием .NET Framework

Флаг SCH_USE_STRONG_CRYPTO (что было актуально в моем случае)

Параметры реестра Transport Layer Security (TLS) (Этот параметр относится на стороне Windows для настройки доступных наборов шифров)

EDIT:

Эта статья (Трой Старр [MSFT]) помогла мне понять мою проблему: https://community.qualys.com/thread/16917-net-framework#comment-35829

...