Правильный способ установки ServicePointManager.SecurityProcol при использовании неуправляемого исполняемого файла - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть неуправляемая (C ++) программа, которая использует несколько управляемых (C #) DLL через COM, и мне нужны эти DLL для использования TLS1.2.Все библиотеки DLL предназначены для .NET 4.6 или выше, но это не имеет значения.

Когда я запускаю управляемые программы, предназначенные для .NET 4.6 и 4.7, и вызываю управляемую DLL, SecurityProtocol устанавливается на Tls, Tls11, Tls12 и SystemDefault, соответственно, и TLS1.2 используется.Когда я запускаю неуправляемую программу и вызываю ту же управляемую DLL, SecurityProtocol устанавливается на Ssl3, Tls и не использует TLS1.2.

Что не работает:

  • Установка supportedRuntime в MyProgram.exe.config.Добавление <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" /></startup> к файлу конфигурации не повлияло на протокол безопасности.

Что работает, но не оптимально:

  • Создание новой библиотеки DLL, которая явно устанавливает протокол безопасности.и вызов его в неуправляемой программе раньше всего;SecurityProtocol тогда будет правильно настроен для вызовов ко всем другим DLL.Это хорошо работает, но я не хочу добавлять еще одну зависимость в свой проект только для этого.
  • Установка AppContextSwitchOverrides в файле конфигурации путем добавления строки <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false" /> приведет к тому, что SecurityProtocol будет Tls, Tls11, Tls12,Это хорошо работает, но похоже на хак, который использует недокументированное (и, возможно, непреднамеренное) поведение.

Есть ли лучший способ заставить управляемый DLL SecurityProtocol использовать Tls12 или SystemDefaultпри запуске моей неуправляемой программы?Спасибо.

1 Ответ

0 голосов
/ 29 мая 2019

Симон Мурье был прав, установка <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false" /> в файле конфигурации является официальным способом добавить Tls12 в качестве протокола по умолчанию.

...