使用非托管可执行文件时设置 ServicePointManager.SecurityProcol 的正确方法

Proper way to set ServicePointManager.SecurityProcol when using an unmanaged executable

我有一个非托管 (C++) 程序,它通过 COM 使用多个托管 (C#) DLL,我需要这些 DLL 才能使用 TLS1.2。所有 DLL 都以 .NET 4.6 或更高版本为目标,但这似乎无关紧要。

当我 运行 管理以 .NET 4.6 和 4.7 为目标的程序并调用托管 DLL 时,SecurityProtocol 分别设置为 Tls, Tls11, Tls12SystemDefault,并且 TLS1.2用来。当我 运行 我的非托管程序并调用相同的托管 DLL 时,SecurityProtocol 设置为 Ssl3, Tls 并且它不使用 TLS1.2。

什么不起作用:

有效但不是最优的方法:

在 运行 非托管程序时,是否有更好的方法让托管 DLL 的 SecurityProtocol 使用 Tls12SystemDefault?谢谢。

Simon Mourier 是正确的,在配置文件中设置 <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false" /> 是将 Tls12 添加为默认协议的官方方式。