Najlepsze rozwiązania dotyczące protokołu Transport Layer Security (TLS) w programie .NET Framework

Uwaga

Ta strona zawiera informacje dotyczące protokołu TLS programu .NET Framework. Jeśli szukasz informacji dotyczących protokołu TLS dla platformy .NET, zobacz: Tls/SSL Best Practices (Najlepsze rozwiązania dotyczące protokołu TLS/SSL)

Program .NET Framework obsługuje używanie protokołu Transport Layer Security (TLS) do zabezpieczania komunikacji sieciowej.

Co to jest protokół Transport Layer Security (TLS)?

Ostrzeżenie

Protokoły TLS 1.0 i 1.1 zostały wycofane przez RFC8996. Ten dokument obejmuje tylko protokoły TLS 1.2 i TLS 1.3.

Protokół Transport Layer Security (TLS) to najnowsza wersja standardu przeznaczona do ochrony prywatności informacji przekazywanych przez Internet. Protokół TLS 1.3 jest standardem, który zapewnia ulepszenia zabezpieczeń w porównaniu z poprzednimi wersjami. W tym artykule przedstawiono zalecenia dotyczące zabezpieczania aplikacji .NET Framework korzystających z protokołu TLS.

KtoTo może skorzystać z tego dokumentu?

Obsługa protokołu TLS w programie .NET Framework

Ponieważ program .NET Framework jest zależny od Schannel systemu Windows, które wersje można negocjować, a która wersja będzie używana, zależy od systemu operacyjnego.

Oto zaktualizowana przykładowa tabela przedstawiająca najbardziej obsługiwaną wersję protokołu TLS dla różnych kombinacji wersji systemu operacyjnego i wersji docelowych programu .NET Framework:

Wersja docelowa programu .NET Framework Windows 10 Windows 11
3.5 TLS 1.2 TLS 1.2
4.6.2 TLS 1.2 TLS 1.3
4.7 TLS 1.2 TLS 1.3
4.7.1 TLS 1.2 TLS 1.3
4.7.2 TLS 1.2 TLS 1.3
4.8 TLS 1.2 TLS 1.3
4.8.1 TLS 1.2 TLS 1.3

Aby uzyskać więcej informacji, zobacz Obsługa wersji protokołu TLS w usłudze Schannel.

Zalecenia

  • W przypadku protokołu TLS 1.3 docelowy program .NET Framework 4.8 lub nowszy.
  • Nie należy jawnie określać wersji protokołu TLS. Skonfiguruj kod, aby umożliwić systemowi operacyjnemu podjęcie decyzji o wersji protokołu TLS.
  • Wykonaj dokładną inspekcję kodu, aby sprawdzić, czy nie określasz jawnie wersji protokołu TLS lub SSL.
  • Nie używaj polecenia SslProtocols.Default. (SslProtocols.Default określa wersję SSL3 i TLS1.0, która jest przestarzała).

Gdy aplikacja umożliwia systemowi operacyjnemu wybranie wersji protokołu TLS:

  • Automatycznie korzysta z nowych protokołów dodanych w przyszłości.
  • System operacyjny blokuje protokoły, które nie są wykrywane jako bezpieczne.

Sekcja Inspekcja kodu i wprowadzanie zmian w kodzie obejmuje inspekcję i aktualizowanie kodu.

W tym artykule wyjaśniono, jak włączyć najsilniejsze zabezpieczenia dostępne dla wersji programu .NET Framework przeznaczonej dla aplikacji i jej działania. Gdy aplikacja jawnie ustawia protokół zabezpieczeń i wersję, rezygnuje z innej alternatywy i rezygnuje z domyślnego zachowania programu .NET Framework i systemu operacyjnego. Jeśli chcesz, aby aplikacja mogła negocjować połączenie TLS 1.3, jawne ustawienie na niższą wersję protokołu TLS uniemożliwia połączenie TLS 1.3.

Jeśli nie możesz jawnie określić wersji protokołu, zdecydowanie zalecamy określenie protokołu TLS1.2 lub TLS 1.3 (czyli currently considered secure). Aby uzyskać wskazówki dotyczące identyfikowania i usuwania zależności protokołu TLS 1.0, pobierz oficjalny dokument Rozwiązywanie problemów z protokołem TLS 1.0.

Program WCF obsługuje protokół TLS 1.2 jako domyślny w programie .NET Framework 4.7. Począwszy od programu .NET Framework 4.7.1, domyślnie program WCF jest w wersji skonfigurowanej przez system operacyjny. Jeśli aplikacja jest jawnie skonfigurowana za pomocą SslProtocols.Noneprogramu , program WCF używa domyślnego ustawienia systemu operacyjnego podczas korzystania z transportu NetTcp.

Pytania dotyczące tego dokumentu można zadać w artykule GitHub Issue Transport Layer Security (TLS) best practices with the .NET Framework (Najlepsze rozwiązania dotyczące protokołu Transport Layer Security (TLS).

Inspekcja kodu i wprowadzanie zmian w kodzie

W przypadku aplikacji ASP.NET sprawdź <system.web><httpRuntime targetFramework> element web.config , aby sprawdzić, czy używasz docelowej wersji programu .NET Framework.

Aby zapoznać się z formularzami systemu Windows i innymi aplikacjami, zobacz How to: Target a Version of the .NET Framework (Instrukcje: określanie wersji docelowej wersji programu .NET Framework).

Skorzystaj z poniższych sekcji, aby sprawdzić, czy nie używasz określonej wersji protokołu TLS ani SSL.

Jeśli musisz jawnie ustawić protokół zabezpieczeń

Jeśli musisz jawnie ustawić protokół zabezpieczeń zamiast zezwalać programowi .NET lub systemowi operacyjnemu wybrać protokół zabezpieczeń, wybierz następujące protokoły:

  • W przypadku programu .NET Framework 3.5: TLS 1.2
  • W przypadku programu .NET Framework 4.6.2 lub nowszego: TLS 1.3

Jeśli nie możesz znaleźć określonych protokołów w wyliczenie, możesz dodać je jako plik rozszerzenia. Sprawdź poniżej:

SslProtocolExtensions.cs

namespace System.Security.Authentication
{
    public static class SslProtocolsExtensions
    {
        // For .NET Framework 3.5
        public const SslProtocols Tls12 = (SslProtocols)3072;
        // For .NET Framework 4.6.2 and later
        public const SslProtocols Tls13 = (SslProtocols)12288;
    }
}

SecurityProtocolExtensions.cs

using System.Security.Authentication;

namespace System.Net
{
    public static class SecurityProtocolTypeExtensions
    {
        // For .NET Framework 3.5
        public const SecurityProtocolType Tls12 = (SecurityProtocolType)SslProtocolsExtensions.Tls12;
        // For .NET Framework 4.6.2 and later
        public const SecurityProtocolType Tls13 = (SecurityProtocolType)SslProtocolsExtensions.Tls13;
    }
}

Aby uzyskać więcej informacji, zobacz Support for TLS System Default Versions included in .NET Framework 3.5 on Windows 8.1 and Windows Server 2012 R2 (Obsługa domyślnych wersji systemu TLS w programie .NET Framework 3.5 w systemach Windows 8.1 i Windows Server 2012 R2).

W przypadku interfejsów API System.Net (HttpClient, SslStream)

Jeśli aplikacja jest przeznaczona dla programu .NET Framework w wersji 4.7 lub nowszej

W poniższych sekcjach pokazano, jak skonfigurować aplikację do korzystania z currently considered secure versions protokołu TLS. (TLS 1.2, TLS 1.3)

W przypadku elementów HttpClient i HttpWebRequest

ServicePointManager, przy użyciu programu .NET Framework 4.7 i nowszych wersji, użyje domyślnego protokołu zabezpieczeń skonfigurowanego w systemie operacyjnym. Aby uzyskać domyślny wybór systemu operacyjnego, jeśli to możliwe, nie ustawiaj wartości dla ServicePointManager.SecurityProtocol właściwości , która domyślnie ma wartość SecurityProtocolType.SystemDefault.

SecurityProtocolType.SystemDefault Ponieważ ustawienie powoduje ServicePointManager użycie domyślnego protokołu zabezpieczeń skonfigurowanego przez system operacyjny, aplikacja może działać inaczej w zależności od systemu operacyjnego, na podstawie na nim uruchomiony. Na przykład system Windows 10 używa protokołu TLS 1.2, a system Windows 11 używa protokołu TLS 1.3.

Dla protokołu SslStream

SslStream, przy użyciu programu .NET Framework 4.7 i nowszych wersji, domyślnie system operacyjny wybiera najlepszy protokół zabezpieczeń i wersję. Aby uzyskać najlepszy wybór domyślnego systemu operacyjnego, jeśli to możliwe, nie używaj przeciążeń SslStream metody, które przyjmują jawny SslProtocols parametr. W przeciwnym razie przekaż polecenie SslProtocols.None. Zalecamy, aby nie używać Defaultpolecenia ; ustawienie SslProtocols.Default wymusza użycie protokołu SSL 3.0 /TLS 1.0 i uniemożliwia protokół TLS 1.2.

Nie ustawiaj wartości dla SecurityProtocol właściwości (dla sieci HTTP).

Nie używaj przeciążeń SslStream metody, które przyjmują jawny SslProtocols parametr (dla sieci gniazd TCP). Podczas ponownego pobierania aplikacji do programu .NET Framework w wersji 4.7 lub nowszej będziesz przestrzegać zaleceń dotyczących najlepszych rozwiązań.

W przypadku aplikacji WCF

Jeśli aplikacja jest przeznaczona dla programu .NET Framework w wersji 4.7 lub nowszej

W poniższych sekcjach pokazano, jak skonfigurować aplikację do korzystania z currently considered secure versions protokołu TLS. (TLS 1.2, TLS 1.3)

Korzystanie z transportu TCP przy użyciu zabezpieczeń transportu z poświadczeniami certyfikatu

WCF używa tego samego stosu sieciowego co reszta programu .NET Framework.

Jeśli jest przeznaczona wersja 4.7.1, program WCF jest skonfigurowany tak, aby zezwalał systemowi operacyjnemu na wybór najlepszego protokołu zabezpieczeń domyślnie, chyba że jawnie skonfigurowano:

  • W pliku konfiguracji aplikacji.
  • Lub w aplikacji w kodzie źródłowym.

Domyślnie program .NET Framework 4.7 i nowsze wersje są skonfigurowane do używania protokołu TLS 1.2 i zezwalania na połączenia przy użyciu protokołu TLS 1.1 lub TLS 1.0. Skonfiguruj program WCF, aby umożliwić systemowi operacyjnemu wybór najlepszego protokołu zabezpieczeń, konfigurując powiązanie do używania programu SslProtocols.None. Można to ustawić na .SslProtocols SslProtocols.None dostęp do programu można uzyskać z witryny Transport. NetTcpSecurity.Transport dostęp do programu można uzyskać z witryny Security.

Jeśli używasz powiązania niestandardowego:

  • Skonfiguruj program WCF, aby zezwolić systemowi operacyjnemu na wybór najlepszego protokołu zabezpieczeń, ustawiając opcję SslProtocols .SslProtocols.None
  • Możesz też skonfigurować protokół używany ze ścieżką system.serviceModel/bindings/customBinding/binding/sslStreamSecurity:sslProtocolskonfiguracji .

Jeśli nie używasz powiązania niestandardowego i konfigurujesz powiązanie WCF przy użyciu konfiguracji, ustaw protokół używany ze ścieżką system.serviceModel/bindings/netTcpBinding/binding/security/transport:sslProtocolskonfiguracji .

Używanie zabezpieczeń komunikatów z poświadczeniami certyfikatu

Program .NET Framework 4.7 i nowsze wersje domyślnie używają protokołu określonego SecurityProtocol we właściwości . Gdy parametr AppContextSwitchSwitch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols jest ustawiony na truewartość , program WCF wybiera najlepszy protokół, maksymalnie TLS 1.0.

Jeśli aplikacja jest przeznaczona dla programu .NET Framework w wersji starszej niż 4.7

W poniższych sekcjach pokazano, jak skonfigurować aplikację do korzystania z currently considered secure versions protokołu TLS. (TLS 1.2, TLS 1.3)

Korzystanie z programu .NET Framework 4.6.2 przy użyciu zabezpieczeń transportu TCP z poświadczeniami certyfikatu

Platforma WCF automatycznie wybiera najwyższy protokół dostępny do protokołu TLS 1.2, chyba że jawnie skonfigurujesz wersję protokołu. Aby uzyskać więcej informacji, zobacz poprzednią sekcję Dla transportu TCP WCF przy użyciu zabezpieczeń transportu z poświadczeniami certyfikatu.

Używanie programu .NET Framework 3.5 zabezpieczeń transportu TCP z poświadczeniami certyfikatu

Te wersje platformy WCF są jawnie określane do używania wartości SSL 3.0 i TLS 1.0. Tych wartości nie można zmienić. Aby używać protokołu TLS 1.2, należy zaktualizować program NET Framework 4.6.2 lub nowszą wersję i przeprowadzić ich ponowną wersję.

Konfigurowanie zabezpieczeń za pomocą przełączników AppContext (w przypadku programu .NET Framework w wersji 4.6.2 lub nowszej)

Przełączniki AppContext opisane w tej sekcji są istotne, jeśli aplikacja jest przeznaczona dla aplikacji lub działa w programie .NET Framework 4.6.2 lub nowszych wersjach. Czy domyślnie, czy też przez ich jawne ustawienie, przełączniki powinny być false , jeśli to możliwe. Jeśli chcesz skonfigurować zabezpieczenia za pośrednictwem jednego lub obu przełączników, nie należy określać wartości protokołu zabezpieczeń w kodzie; spowoduje to zastąpienie przełącznika (es).

W przypadku interfejsów API System.Net (HttpClient, SslStream)

Przełączniki mają taki sam efekt, niezależnie od tego, czy korzystasz z sieci HTTP (ServicePointManager) czy sieci gniazd TCP (SslStream).

Switch.System.Net.DontEnableSchUseStrongCrypto

Wartość dla przyczyn, dla Switch.System.Net.DontEnableSchUseStrongCrypto których aplikacja używa silnej false kryptografii. Wartość false dla używa DontEnableSchUseStrongCrypto bezpieczniejszych protokołów sieciowych (TLS 1.2 i TLS 1.1) i blokuje protokoły, które nie są bezpieczne. Aby uzyskać więcej informacji, zobacz flagę SCH_USE_STRONG_CRYPTO. Wartość wyłącza silną true kryptografię dla aplikacji. Ten przełącznik ma wpływ tylko na połączenia klienta (wychodzące) w aplikacji.

Jeśli aplikacja jest przeznaczona dla programu .NET Framework w wersji 4.6.2 lub nowszej, spowoduje to przełączenie wartości domyślnych na false. Jest to bezpieczne ustawienie domyślne, które zalecamy. Jeśli aplikacja działa na platformie .NET Framework 4.6.2, ale jest przeznaczona dla starszej wersji, przełącz wartość domyślną na true. W takim przypadku należy jawnie ustawić go na falsewartość .

DontEnableSchUseStrongCrypto Powinna mieć wartość tylko true wtedy, gdy musisz nawiązać połączenie ze starszymi usługami, które nie obsługują silnej kryptografii i nie można ich uaktualnić.

Switch.System.Net.DontEnableSystemDefaultTlsVersions

Wartość parametru false dla Switch.System.Net.DontEnableSystemDefaultTlsVersions powoduje, że aplikacja zezwala systemowi operacyjnemu na wybór protokołu. Wartość true powoduje, że aplikacja używa protokołów wybranych przez program .NET Framework.

Jeśli aplikacja jest przeznaczona dla platformy .NET Framework w wersji 4.7 lub nowszej, spowoduje to przełączenie wartości domyślnych na false. Jest to bezpieczne ustawienie domyślne, które zalecamy. Jeśli aplikacja działa w wersji .NET Framework 4.7 lub nowszej, ale jest przeznaczona dla starszej wersji, przełącz wartość domyślną na true. W takim przypadku należy jawnie ustawić go na falsewartość .

W przypadku aplikacji WCF

Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols

Wartość parametru false dla Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols powoduje, że aplikacja używa wartości zdefiniowanej w ServicePointManager.SecurityProtocols w celu zabezpieczenia komunikatów przy użyciu poświadczeń certyfikatu. Wartość używa najwyższego true dostępnego protokołu do TLS1.0

W przypadku aplikacji przeznaczonych dla programu .NET Framework 4.7 lub nowszych wersji ta wartość jest domyślnie ustawiona na false. W przypadku aplikacji przeznaczonych dla platformy .NET Framework w wersji 4.6.2 lub starszej ta wartość jest domyślnie ustawiona na true.

Switch.System.ServiceModel.DontEnableSystemDefaultTlsVersions

Wartość false dla Switch.System.ServiceModel.DontEnableSystemDefaultTlsVersions ustawia domyślną konfigurację, aby umożliwić systemowi operacyjnemu wybranie protokołu. Wartość true ustawia wartość domyślną na najwyższy dostępny protokół, do TLS1.2.

W przypadku aplikacji przeznaczonych dla programu .NET Framework 4.7.1 i nowszych wersji ta wartość jest domyślnie ustawiona na false. W przypadku aplikacji przeznaczonych dla platformy .NET Framework 4.7 i starszych ta wartość jest domyślnie ustawiona na true.

Aby uzyskać więcej informacji na temat protokołów TLS, zobacz Środki zaradcze: protokoły TLS. Aby uzyskać więcej informacji na temat AppContext przełączników, zobacz <AppContextSwitchOverrides> Element.

Konfigurowanie zabezpieczeń za pośrednictwem rejestru systemu Windows

Ostrzeżenie

Ustawienie kluczy rejestru wpływa na wszystkie aplikacje w systemie. Użyj tej opcji tylko wtedy, gdy masz pełną kontrolę nad maszyną i możesz kontrolować zmiany w rejestrze.

Jeśli ustawienie jednego lub obu AppContext przełączników nie jest opcją, możesz kontrolować protokoły zabezpieczeń używane przez aplikację z kluczami rejestru systemu Windows opisanymi w tej sekcji. Jeśli aplikacja działa w programie .NET Framework 3.5, może nie być możliwe użycie jednego lub obu AppContext przełączników lub jeśli nie możesz edytować pliku konfiguracji. Jeśli chcesz skonfigurować zabezpieczenia za pomocą rejestru, nie należy określać wartości protokołu zabezpieczeń w kodzie; spowoduje to zastąpienie ustawienia rejestru.

Nazwy kluczy rejestru są podobne do nazw odpowiednich AppContext przełączników, ale bez DontEnable poprzedzania nazwy. Na przykład AppContext przełącznik DontEnableSchUseStrongCrypto jest kluczem rejestru O nazwie SchUseStrongCrypto.

Te klucze są dostępne we wszystkich wersjach programu .NET Framework.

Wszystkie klucze rejestru opisane poniżej mają taki sam efekt, niezależnie od tego, czy wykonujesz sieć HTTP (ServicePointManager) czy sieć gniazd TCP (SslStream).

SchUseStrongCrypto

Wpis HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SchUseStrongCrypto rejestru ma wartość typu DWORD. Wartość 1 powoduje, że aplikacja używa silnej kryptografii. Silna kryptografia używa bezpieczniejszych protokołów sieciowych (TLS 1.2 i TLS 1.1) oraz blokuje protokoły, które nie są bezpieczne. Wartość 0 wyłącza silną kryptografię. Aby uzyskać więcej informacji, zobacz flagę SCH_USE_STRONG_CRYPTO. To ustawienie rejestru ma wpływ tylko na połączenia klienta (wychodzące) w aplikacji.

Jeśli aplikacja jest przeznaczona dla programu .NET Framework w wersji 4.6 lub nowszej, ten klucz domyślnie ma wartość 1. Jest to bezpieczne ustawienie domyślne, które zalecamy. Jeśli aplikacja jest przeznaczona dla platformy .NET Framework 4.5.2 lub starszych wersji, klucz domyślnie to 0. W takim przypadku należy jawnie ustawić jego wartość na 1.

Ten klucz powinien mieć wartość 0, jeśli musisz połączyć się ze starszymi usługami, które nie obsługują silnej kryptografii i nie można ich uaktualnić.

SystemDefaultTlsVersions

Wpis HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SystemDefaultTlsVersions rejestru ma wartość typu DWORD. Wartość 1 powoduje, że aplikacja zezwala systemowi operacyjnemu na wybór protokołu. Wartość 0 powoduje, że aplikacja używa protokołów wybranych przez program .NET Framework.

<VERSION> musi mieć wartość v4.0.30319 (dla programu .NET Framework 4 lub nowszej) lub 2.0.50727 (dla programu .NET Framework 3.5).

Jeśli aplikacja jest przeznaczona dla programu .NET Framework w wersji 4.7 lub nowszej, ten klucz domyślnie ma wartość 1. Jest to bezpieczne ustawienie domyślne, które zalecamy. Jeśli aplikacja jest przeznaczona dla programu .NET Framework 4.6.1 lub starszych wersji, klucz jest domyślnie ustawiona na 0. W takim przypadku należy jawnie ustawić jego wartość na 1.

Aby uzyskać więcej informacji, zobacz Aktualizacja zbiorcza dla systemu Windows 10 w wersji 1511 i Windows Server 2016 Technical Preview 4: 10 maja 2016 r.

Aby uzyskać więcej informacji o programie .NET Framework 3.5.1, zobacz Support for TLS System Default Versions included in .NET Framework 3.5.1 on Windows 7 SP1 and Server 2008 R2 SP1 (Obsługa domyślnych wersji systemu TLS dostępnych w programie .NET Framework 3.5.1 w systemach Windows 7 z dodatkiem SP1 i Server 2008 R2 z dodatkiem SP1).

Poniżej przedstawiono następujący element . Plik REG ustawia wpisy rejestru i ich warianty na najbardziej bezpieczne wartości:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

Konfigurowanie protokołów Schannel w rejestrze systemu Windows

Rejestru można użyć do precyzyjnej kontroli nad protokołami negocjowanych przez klienta i/lub aplikację serwera. Sieć aplikacji przechodzi przez usługę Schannel (czyli inną nazwę bezpiecznego kanału). Konfigurując Schannelprogram , można skonfigurować zachowanie aplikacji.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols Zacznij od klucza rejestru. W tym kluczu można utworzyć wszystkie podklucze w zestawie TLS 1.2, TLS 1.3. W każdym z tych podklucza można tworzyć podklucze Client i/lub Server. W obszarze Client i Servermożna utworzyć wartości DisabledByDefault DWORD (0 lub 1) i Enabled (0 lub 1).

Aby uzyskać więcej informacji, zobacz: Ustawienia rejestru TLS — Schannel

Flaga SCH_USE_STRONG_CRYPTO

Po włączeniu (domyślnie przez AppContext przełącznik lub rejestr systemu Windows) program .NET Framework używa SCH_USE_STRONG_CRYPTO flagi, gdy aplikacja inicjuje połączenie TLS z serwerem. Program .NET Framework przekazuje flagę, aby Schannel poinstruować ją o wyłączeniu znanych słabych algorytmów kryptograficznych, zestawów szyfrowania i wersji protokołu TLS/SSL, które mogą być w przeciwnym razie włączone w celu lepszego współdziałania. Aby uzyskać więcej informacji, zobacz:

Flaga SCH_USE_STRONG_CRYPTO jest również przekazywana do Schannel dla połączeń klienta (wychodzących), gdy jawnie używasz Tls11 wartości lub wyliczonych SecurityProtocolType wartości lub Tls12SslProtocols. Flaga SCH_USE_STRONG_CRYPTO jest używana tylko w przypadku połączeń, w których aplikacja pełni rolę klienta. Słabe protokoły i algorytmy można wyłączyć, gdy aplikacje pełnią rolę serwera, konfigurując ustawienia rejestru całego Schannel komputera.