Bewährte Methoden für Transport Layer Security (TLS) mit .NET FrameworkTransport Layer Security (TLS) best practices with the .NET Framework

Das TLS-Protokoll (Transport Layer Security) ist ein Industriestandard zum Schutz von Daten, die über das Internet übertragen werden.The Transport Layer Security (TLS) protocol is an industry standard designed to help protect the privacy of information communicated over the Internet. TLS 1.2 ist ein Standard, der Sicherheitsverbesserungen gegenüber früheren Versionen umfasst.TLS 1.2 is a standard that provides security improvements over previous versions. TLS 1.2 wird schließlich durch den neuesten freigegebenen Standard TLS 1.3 ersetzt, der schneller ist und eine erhöhte Sicherheit bietet.TLS 1.2 will eventually be replaced by the newest released standard TLS 1.3 which is faster and has improved security. Dieser Artikel enthält Empfehlungen zur Sicherung von .NET Framework-Anwendungen, die das TLS-Protokoll verwenden.This article presents recommendations to secure .NET Framework applications that use the TLS protocol.

Um die Sicherheit von .NET Framework-Anwendungen zu gewährleisten, sollte die TLS-Version nicht hartcodiert sein.To ensure .NET Framework applications remain secure, the TLS version should not be hardcoded. .NET Framework-Anwendungen sollten die vom Betriebssystem unterstützte TLS-Version verwenden..NET Framework applications should use the TLS version the operating system (OS) supports.

Dieses Dokument richtet sich an Entwickler, für die Folgendes zutrifft:This document targets developers who are:

Folgendes wird empfohlen:We recommend that you:

  • Verwenden Sie .NET Framework 4.7 oder höhere Versionen für Ihre Apps.Target .NET Framework 4.7 or later versions on your apps. Verwenden Sie .NET Framework 4.7.1 oder höhere Versionen für Ihre WCF-Apps.Target .NET Framework 4.7.1 or later versions on your WCF apps.
  • Geben Sie keine TLS-Version an.Do not specify the TLS version. Konfigurieren Sie Ihren Code so, dass das Betriebssystem über die TLS-Version entscheidet.Configure your code to let the OS decide on the TLS version.
  • Führen Sie eine gründliche Codeüberprüfung durch, um sicherzustellen, dass Sie keine TLS- oder SSL-Version festlegen.Perform a thorough code audit to verify you're not specifying a TLS or SSL version.

Wenn die TLS-Version in Ihrer App vom Betriebssystem gewählt wird:When your app lets the OS choose the TLS version:

  • Werden automatisch neue Protokolle genutzt, die in Zukunft hinzugefügt werden, wie z.B. TLS 1.3.It automatically takes advantage of new protocols added in the future, such as TLS 1.3.
  • Blockiert das Betriebssystem Protokolle, die als nicht sicher erkannt werden.The OS blocks protocols that are discovered not to be secure.

Der Abschnitt Überprüfen Ihres Codes und vornehmen von Codeänderungen unterstützt Sie dabei, Ihren Code zu überprüfen und zu aktualisieren.The section Audit your code and make code changes covers auditing and updating your code.

Dieser Artikel erklärt, wie Sie die höchste Sicherheit für die Version des .NET-Frameworks erreichen, auf die Ihre App abzielt und unter der sie ausgeführt wird.This article explains how to enable the strongest security available for the version of the .NET Framework that your app targets and runs on. Wenn ein Sicherheitsprotokoll und eine Sicherheitsversion von einer App explizit festlegt werden, sind somit jede andere Alternative und das Standardverhalten von .NET Framework und dem Betriebssystem ausgeschlossen.When an app explicitly sets a security protocol and version, it opts out of any other alternative, and opts out of .NET Framework and OS default behavior. Wenn Sie möchten, dass Ihre App eine TLS 1.2-Verbindung aushandeln kann, wird dies durch das explizite Festlegen auf eine niedrigere Version als TLS 1.2 verhindert.If you want your app to be able to negotiate a TLS 1.2 connection, explicitly setting to a lower TLS version prevents a TLS 1.2 connection.

Sollte sich die Hartcodierung einer Protokollversion nicht vermeiden lassen, wird dringend empfohlen, TLS 1.2 festzulegen.If you can't avoid hardcoding a protocol version, we strongly recommend that you specify TLS 1.2. Eine Anleitung zum Identifizieren und Entfernen von TLS 1.0-Abhängigkeiten finden Sie im Whitepaper Solving the TLS 1.0 Problem (Lösung des TLS 1.0-Problems), das als Download verfügbar ist.For guidance on identifying and removing TLS 1.0 dependencies, download the Solving the TLS 1.0 Problem whitepaper.

WCF unterstützt TLS 1.0, 1.1 und 1.2 als Standard in .NET Framework 4.7.WCF Supports TLS1.0, 1.1 and 1.2 as the default in .NET Framework 4.7. Ab .NET Framework 4.7.1 verwendet WCF standardmäßig die vom Betriebssystem konfigurierte Version.Starting with .NET Framework 4.7.1, WCF defaults to the operating system configured version. Wenn eine Anwendung explizit mit SslProtocols.None konfiguriert ist, verwendet WCF die Standardeinstellung des Betriebssystems für den NetTcp-Transport.If an application is explicitly configured with SslProtocols.None, WCF uses the operating system default setting when using the NetTcp transport.

Fragen zu diesem Dokument können Sie im GitHub-Thema Transport Layer Security (TLS) best practices with the .NET Framework (Bewährte Methoden für TLS mit .NET Framework) stellen.You can ask questions about this document in the GitHub issue Transport Layer Security (TLS) best practices with the .NET Framework.

Überprüfen Ihres Codes und vornehmen von CodeänderungenAudit your code and make code changes

Für ASP.NET-Anwendungen überprüfen Sie das Element <system.web><httpRuntime targetFramework> von web.config, um sicherzustellen, dass Sie die beabsichtigte Version von .NET Framework verwenden.For ASP.NET applications, inspect the <system.web><httpRuntime targetFramework> element of web.config to verify you're using the intended version of the .NET Framework.

Für Windows Forms und andere Anwendungen lesen Sie Vorgehensweise: Erstellen von Projekten für eine bestimmte .NET Framework-Version.For Windows Forms and other applications, see How to: Target a Version of the .NET Framework.

Verwenden Sie die folgenden Abschnitte, um sicherzustellen, dass Sie keine bestimmte TLS- oder SSL-Version verwenden.Use the following sections to verify you're not using a specific TLS or SSL version.

Wenn Ihre App auf .NET Framework 4.7 oder höhere Versionen abzieltIf your app targets .NET Framework 4.7 or later versions

Die folgenden Abschnitte zeigen, wie Sie sicherstellen können, dass Sie keine bestimmte TLS- oder SSL-Version verwenden.The following sections show how to verify you're not using a specific TLS or SSL version.

Für HTTP-NetzwerkeFor HTTP networking

ServicePointManager wird bei Verwendung von .NET Framework 4.7 oder höheren Versionen standardmäßig auf die Vorgabe des Betriebssystems gesetzt, welches das beste Sicherheitsprotokoll und die beste Version auswählt.ServicePointManager, using .NET Framework 4.7 and later versions, defaults to the OS choosing the best security protocol and version. Damit standardmäßig die beste Wahl des Betriebssystems übernommen wird, legen Sie möglichst keinen Wert für die SecurityProtocol-Eigenschaft fest.To get the default OS best choice, if possible, don't set a value for the SecurityProtocol property. Legen Sie sie andernfalls auf SystemDefault fest.Otherwise, set it to SystemDefault.

Der Rest dieses Artikels ist nicht relevant, wenn .NET Framework 4.7 oder höhere Versionen für HTTP-Netzwerke verwendet werden sollen.The remainder of this article is not relevant when targeting .NET Framework 4.7 or later versions for HTTP networking.

Für TCP-SocketnetzwerkeFor TCP sockets networking

SslStream wird bei Verwendung von .NET Framework 4.7 oder höheren Versionen standardmäßig auf die Vorgabe des Betriebssystems gesetzt, welches das beste Sicherheitsprotokoll und die beste Version auswählt.SslStream, using .NET Framework 4.7 and later versions, defaults to the OS choosing the best security protocol and version. Damit standardmäßig die beste Wahl des Betriebssystems übernommen wird, verwenden Sie möglichst nicht die Methodenüberladungen von SslStream, die einen expliziten SslProtocols-Parameter übernehmen.To get the default OS best choice, if possible, don't use the method overloads of SslStream that take an explicit SslProtocols parameter. Andernfalls übergeben Sie SslProtocols.None.Otherwise, pass SslProtocols.None. Die Verwendung von Default wird nicht empfohlen. Durch die Einstellung SslProtocols.Default wird die Verwendung von SSL 3.0/TLS 1.0 erzwungen und TLS 1.2 nicht genutzt.We recommend that you don't use Default; setting SslProtocols.Default forces the use of SSL 3.0 /TLS 1.0 and prevents TLS 1.2.

Legen Sie (bei HTTP-Netzwerken) keinen Wert für die SecurityProtocol-Eigenschaft fest.Don't set a value for the SecurityProtocol property (for HTTP networking).

Verwenden Sie (bei TCP-Socketnetzwerken) keine Methodenüberladungen von SslStream, die einen expliziten SslProtocols-Parameter übernehmen.Don't use the method overloads of SslStream that take an explicit SslProtocols parameter (for TCP sockets networking). Wenn Sie Ihre App erneut auf .NET Framework 4.7 oder höhere Versionen ausrichten, folgen Sie der Empfehlung in den bewährten Methoden.When you retarget your app to .NET Framework 4.7 or later versions, you'll be following the best practices recommendation.

Der Rest dieses Themas ist nicht relevant, wenn es um .NET Framework 4.7 oder höhere Versionen für TCP-Socketnetzwerke geht.The remainder of this topic is not relevant when targeting .NET Framework 4.7 or later versions for TCP sockets networking.

Für WCF-TCP-Transport unter Berücksichtigung der Transportsicherheit mit ZertifikatanmeldeinformationenFor WCF TCP transport using transport security with certificate credentials

WCF verwendet den gleichen Netzwerkstack wie der Rest des .NET Frameworks.WCF uses the same networking stack as the rest of the .NET Framework.

Wenn Sie auf 4.7.1 abzielen, ist WCF so konfiguriert, dass das Betriebssystem standardmäßig das beste Sicherheitsprotokoll auswählen kann, sofern es nicht explizit an einem der folgenden Orte festgelegt ist:If you are targeting 4.7.1, WCF is configured to allow the OS to choose the best security protocol by default unless explicitly configured:

  • In der Konfigurationsdatei Ihrer AnwendungIn your application configuration file.
  • Oder, im Quellcode Ihrer AnwendungOr, in your application in the source code.

.NET Framework 4.7 und höhere Versionen sind standardmäßig für die Verwendung von TLS 1.2 konfiguriert und erlauben Verbindungen mit TLS 1.1 oder TLS 1.0.By default, .NET Framework 4.7 and later versions is configured to use TLS 1.2 and allows connections using TLS 1.1 or TLS 1.0. Konfigurieren Sie WCF, damit das Betriebssystem das beste Sicherheitsprotokoll auswählen kann, indem Sie für Ihre Bindung die Verwendung von SslProtocols.None festlegen.Configure WCF to allow the OS to choose the best security protocol by configuring your binding to use SslProtocols.None. Dies kann auf SslProtocols festgelegt werden.This can be set on SslProtocols. SslProtocols.None kann von Transport aus aufgerufen werden.SslProtocols.None can be accessed from Transport. NetTcpSecurity.Transport kann von Security aus aufgerufen werden.NetTcpSecurity.Transport can be accessed from Security.

Bei Verwendung einer benutzerdefinierten Bindung:If you're using a custom binding:

  • Konfigurieren Sie WCF, damit das Betriebssystem das beste Sicherheitsprotokoll auswählen kann, indem Sie für SslProtocols.None die Verwendung von SslProtocols festlegen.Configure WCF to allow the OS to choose the best security protocol by setting SslProtocols to use SslProtocols.None.
  • Oder konfigurieren Sie das Protokoll, das mit dem Konfigurationspfad system.serviceModel/bindings/customBinding/binding/sslStreamSecurity:sslProtocols verwendet wird.Or configure the protocol used with the configuration path system.serviceModel/bindings/customBinding/binding/sslStreamSecurity:sslProtocols.

Wenn Sie keine benutzerdefinierte Bindung verwenden und Ihre WCF-Bindung über die Konfiguration einstellen, legen Sie das verwendete Protokoll mit dem Konfigurationspfad system.serviceModel/bindings/netTcpBinding/binding/security/transport:sslProtocols fest.If you're not using a custom binding and you're setting your WCF binding using configuration, set the protocol used with the configuration path system.serviceModel/bindings/netTcpBinding/binding/security/transport:sslProtocols.

Für WCF-Nachrichtensicherheit mit ZertifikatanmeldeinformationenFor WCF Message Security with certificate credentials

.NET Framework 4.7 und höhere Versionen verwenden standardmäßig das in der SecurityProtocol-Eigenschaft angegebene Protokoll..NET Framework 4.7 and later versions by default uses the protocol specified in the SecurityProtocol property. Wenn der AppContextSwitch Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols auf true gesetzt ist, wählt WCF das beste Protokoll bis TLS 1.0.When the AppContextSwitch Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols is set to true, WCF chooses the best protocol, up to TLS 1.0.

Wenn Ihre App auf eine höhere .NET Framework-Version als 4.7 abzieltIf your app targets a .NET Framework version earlier than 4.7

Überprüfen Sie Ihren Code, um sicherzustellen, dass Sie keine bestimmte TLS- oder SSL-Version verwenden, wie in den folgenden Abschnitten beschrieben:Audit your code to verify you're not setting a specific TLS or SSL version using the following sections:

Für .NET Framework 4.6 bis 4.6.2 und ohne WCFFor .NET Framework 4.6 - 4.6.2 and not WCF

Setzen Sie den DontEnableSystemDefaultTlsVersions AppContext-Switch auf false.Set the DontEnableSystemDefaultTlsVersions AppContext switch to false. Siehe Konfigurieren der Sicherheit über AppContext-Switches.See Configuring security via AppContext switches.

Für WCF mit .NET Framework 4.6 bis 4.6.2 unter Berücksichtigung der Transportsicherheit mit ZertifikatanmeldeinformationenFor WCF using .NET Framework 4.6 - 4.6.2 using TCP transport security with Certificate Credentials

Sie müssen die neuesten Betriebssystempatches installieren.You must install the latest OS patches. Siehe Sicherheitsupdates.See Security updates.

Das WCF-Framework wählt automatisch das höchste bis TLS 1.2 verfügbare Protokoll, es sei denn, Sie konfigurieren explizit eine Protokollversion.The WCF framework automatically chooses the highest protocol available up to TLS 1.2 unless you explicitly configure a protocol version. Weitere Informationen finden Sie im vorhergehenden Abschnitt Für WCF-TCP-Transport unter Berücksichtigung der Transportsicherheit mit Zertifikatanmeldeinformationen.For more information, see the preceding section For WCF TCP transport using transport security with certificate credentials.

Für .NET Framework 3.5 bis 4.5.2 und ohne WCFFor .NET Framework 3.5 - 4.5.2 and not WCF

Es wird empfohlen, ein Upgrade Ihrer App auf .NET Framework 4.7 oder höher auszuführen.We recommend you upgrade your app to .NET Framework 4.7 or later versions. Wenn Sie kein Upgrade ausführen können, gehen Sie wie folgt vor.If you cannot upgrade, take the following steps. Möglicherweise tritt irgendwann in Ihrer Anwendung ein Fehler auf, bis Sie ein Upgrade auf .NET Framework 4.7 oder höher ausgeführt haben.At some point in the future, your application may fail until you upgrade to .NET Framework 4.7 or later versions.

Setzen Sie die Registrierungsschlüssel SchUseStrongCrypto und SystemDefaultTlsVersions auf 1.Set the SchUseStrongCrypto and SystemDefaultTlsVersions registry keys to 1. Siehe Konfigurieren der Sicherheit über die Windows-Registrierung.See Configuring security via the Windows Registry. Die .NET Framework-Version 3.5 unterstützt das Flag SchUseStrongCrypto nur, wenn ein expliziter TLS-Wert übergeben wird.The .NET Framework version 3.5 supports the SchUseStrongCrypto flag only when an explicit TLS value is passed.

Wenn Sie .NET Framework 3.5 ausführen, müssen Sie einen Hotpatch installieren, damit TLS 1.2 von Ihrem Programm festgelegt werden kann:If you are running on .NET Framework 3.5, you need to install a hot patch so that TLS 1.2 can be specified by your program:

KB3154518KB3154518 Zuverlässigkeitsrollup HR-1605 – Unterstützung für Standardversionen des TLS-Systems im .NET Framework 3.5.1 unter Windows 7 SP1 und Windows Server 2008 R2 SP1Reliability Rollup HR-1605 - Support for TLS System Default Versions included in the .NET Framework 3.5.1 on Windows 7 SP1 and Server 2008 R2 SP1
KB3154519KB3154519 Zuverlässigkeitsrollup HR-1605 – Unterstützung für Standardversionen des TLS-Systems im .NET Framework 3.5 unter Windows Server 2012Reliability Rollup HR-1605 - Support for TLS System Default Versions included in the .NET Framework 3.5 on Windows Server 2012
KB3154520KB3154520 Zuverlässigkeitsrollup HR-1605 – Unterstützung für Standardversionen des TLS-Systems im .NET Framework 3.5 unter Windows 8.1 und Windows Server 2012 R2Reliability Rollup HR-1605 -Support for TLS System Default Versions included in the .NET Framework 3.5 on Windows 8.1 and Windows Server 2012 R2
KB3156421KB3156421 1605 Hotfixrollup 3154521 für das .NET Framework 4.5.2 und 4.5.1 unter Windows1605 Hotfix rollup 3154521 for the .NET Framework 4.5.2 and 4.5.1 on Windows

Für WCF mit .NET Framework 3.5 bis 4.5.2 unter Berücksichtigung der Transportsicherheit mit ZertifikatanmeldeinformationenFor WCF using .NET Framework 3.5 - 4.5.2 using TCP transport security with Certificate Credentials

Diese Versionen des WCF-Frameworks sind für die Verwendung der Werte SSL 3.0 und TLS 1.0 hartcodiert.These versions of the WCF framework are hardcoded to use values SSL 3.0 and TLS 1.0. Diese Werte können nicht geändert werden.These values cannot be changed. Sie müssen auf .NET Framework 4.6 oder höhere Versionen aktualisieren und diese dann als Ziel wählen, um TLS 1.1 und 1.2 verwenden zu können.You must update and retarget to NET Framework 4.6 or later versions to use TLS 1.1 and 1.2.

Wenn Ihre App auf .NET Framework 3.5 abzieltIf your app targets .NET Framework 3.5

Wenn Sie explizit ein Sicherheitsprotokoll festlegen müssen, anstatt .NET-Framework oder das Betriebssystem das Sicherheitsprotokoll auswählen zu lassen, fügen Sie die Enumerationen SecurityProtocolTypeExtensions und SslProtocolsExtension zu Ihrem Code hinzu.If you must explicitly set a security protocol instead of letting the .NET framework or the OS pick the security protocol, add SecurityProtocolTypeExtensions and SslProtocolsExtension enumerations to your code. SecurityProtocolTypeExtensions und SslProtocolsExtension enthalten Werte für Tls12, Tls11 und den Wert SystemDefault.SecurityProtocolTypeExtensions and SslProtocolsExtension include values for Tls12, Tls11, and the SystemDefault value. Siehe Unterstützung für Standardversionen des TLS-Systems im .NET Framework 3.5 unter Windows 8.1 und Windows Server 2012 R2.See Support for TLS System Default Versions included in .NET Framework 3.5 on Windows 8.1 and Windows Server 2012 R2.

Konfigurieren der Sicherheit über AppContext-Switches (für .NET Framework 4.6 oder höhere Versionen)Configuring security via AppContext switches (for .NET Framework 4.6 or later versions)

Die in diesem Abschnitt beschriebenen AppContext-Switches sind relevant, wenn Ihre App auf .NET Framework 4.6 oder höher abzielt und darunter ausgeführt wird.The AppContext switches described in this section are relevant if your app targets, or runs on, .NET Framework 4.6 or later versions. Ob standardmäßig oder explizit, die Switches sollten nach Möglichkeit auf false festgelegt sein.Whether by default, or by setting them explicitly, the switches should be false if possible. Wenn Sie die Sicherheitseinstellungen über einen oder beide Switches festlegen möchten, dann geben Sie in Ihrem Code keinen Wert für das Sicherheitsprotokoll an; dies würde die von den Switches vorgenommenen Einstellungen überschreiben.If you want to configure security via one or both switches, then don't specify a security protocol value in your code; doing so would override the switch(es).

Die Switches haben den gleichen Effekt, unabhängig davon, ob Sie HTTP-Netzwerke (ServicePointManager) oder TCP-Socketnetzwerke (SslStream) betreiben.The switches have the same effect whether you're doing HTTP networking (ServicePointManager) or TCP sockets networking (SslStream).

Switch.System.Net.DontEnableSchUseStrongCryptoSwitch.System.Net.DontEnableSchUseStrongCrypto

Der Wert false für Switch.System.Net.DontEnableSchUseStrongCrypto bewirkt, dass Ihre App starke Kryptographie verwendet.A value of false for Switch.System.Net.DontEnableSchUseStrongCrypto causes your app to use strong cryptography. Durch den Wert false für DontEnableSchUseStrongCrypto werden sicherere Netzwerkprotokolle (TLS 1.2, TLS 1.1 und TLS 1.0) verwendet und nicht sichere Protokolle blockiert.A value of false for DontEnableSchUseStrongCrypto uses more secure network protocols (TLS 1.2, TLS 1.1, and TLS 1.0) and blocks protocols that are not secure. Weitere Informationen finden Sie unter Das Flag SCH_USE_STRONG_CRYPTO.For more info, see The SCH_USE_STRONG_CRYPTO flag. Ein Wert true deaktiviert eine starke Kryptographie für Ihre App.A value of true disables strong cryptography for your app.

Wenn Ihre App auf .NET Framework 4.6 oder höhere Versionen abzielt, wird dieser Switch standardmäßig auf false gesetzt.If your app targets .NET Framework 4.6 or later versions, this switch defaults to false. Das ist der empfohlene sichere Standard.That's a secure default, which we recommend. Wenn Ihre App unter .NET Framework 4.6 ausgeführt wird, aber auf eine frühere Version abzielt, wird der Switch standardmäßig auf true gesetzt.If your app runs on .NET Framework 4.6, but targets an earlier version, the switch defaults to true. In diesem Fall sollten Sie ihn explizit auf false setzen.In that case, you should explicitly set it to false.

DontEnableSchUseStrongCrypto sollte nur dann den Wert true aufweisen, wenn Sie sich mit älteren Diensten verbinden müssen, die keine starke Kryptographie unterstützen und nicht aktualisiert werden können.DontEnableSchUseStrongCrypto should only have a value of true if you need to connect to legacy services that don't support strong cryptography and can't be upgraded.

Switch.System.Net.DontEnableSystemDefaultTlsVersionsSwitch.System.Net.DontEnableSystemDefaultTlsVersions

Der Wert false für Switch.System.Net.DontEnableSystemDefaultTlsVersions bewirkt, dass in Ihrer App das Protokoll vom Betriebssystem ausgewählt werden kann.A value of false for Switch.System.Net.DontEnableSystemDefaultTlsVersions causes your app to allow the operating system to choose the protocol. Der Wert true bewirkt, dass Ihre App Protokolle verwendet, die vom .NET Framework ausgewählt wurden.A value of true causes your app to use protocols picked by the .NET Framework.

Wenn Ihre App unter .NET Framework 4.7 oder höhere Versionen abzielt, wird dieser Switch standardmäßig auf false gesetzt.If your app targets .NET Framework 4.7 or later versions, this switch defaults to false. Das ist der empfohlene sichere Standard.That's a secure default that we recommend. Wenn Ihre App unter .NET Framework 4.7 oder höheren Versionen ausgeführt wird, aber auf eine frühere Version abzielt, wird der Switch standardmäßig auf true gesetzt.If your app runs on .NET Framework 4.7 or later versions, but targets an earlier version, the switch defaults to true. In diesem Fall sollten Sie ihn explizit auf false setzen.In that case, you should explicitly set it to false.

Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocolsSwitch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols

Der Wert false für Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols bewirkt, dass Ihre Anwendung den in ServicePointManager.SecurityProtocols definierten Wert für die Nachrichtensicherheit unter Verwendung von Zertifikatanmeldeinformationen verwendet.A value of false for Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols causes your application to use the value defined in ServicePointManager.SecurityProtocols for message security using certificate credentials. Durch den Wert true wird das höchste verfügbare Protokoll, bis zu TLS 1.0, verwendet.A value of true uses the highest protocol available, up to TLS1.0

Für Anwendungen, die auf .NET Framework 4.7 und höhere Versionen abzielen, wird dieser Wert standardmäßig auf false festgelegt.For applications targeting .NET Framework 4.7 and later versions, this value defaults to false. Für Anwendungen, die auf .NET Framework 4.6.2 und frühere Versionen abzielen, wird dieser Wert standardmäßig auf true festgelegt.For applications targeting .NET Framework 4.6.2 and earlier, this value defaults to true.

Switch.System.ServiceModel.DontEnableSystemDefaultTlsVersionsSwitch.System.ServiceModel.DontEnableSystemDefaultTlsVersions

Der Wert false für Switch.System.ServiceModel.DontEnableSystemDefaultTlsVersions legt in der Standardkonfiguration fest, dass das Protokoll vom Betriebssystem ausgewählt werden kann.A value of false for Switch.System.ServiceModel.DontEnableSystemDefaultTlsVersions sets the default configuration to allow the operating system to choose the protocol. Der Wert true legt die Standardeinstellung auf das höchste verfügbare Protokoll, bis zu TLS 1.2, fest.A value of true sets the default to the highest protocol available, up to TLS1.2.

Für Anwendungen, die auf .NET Framework 4.7.1 und höhere Versionen abzielen, wird dieser Wert standardmäßig auf false festgelegt.For applications targeting .NET Framework 4.7.1 and later versions, this value defaults to false. Für Anwendungen, die auf .NET Framework 4.7 und frühere Versionen abzielen, wird dieser Wert standardmäßig auf true festgelegt.For applications targeting .NET Framework 4.7 and earlier, this value defaults to true.

Weitere Informationen über TLS-Protokolle finden Sie unter Entschärfung: TLS-Protokolle.For more information about TLS protocols, see Mitigation: TLS Protocols. Weitere Informationen über AppContext-Switches finden Sie unter <AppContextSwitchOverrides> Element.For more information about AppContext switches, see <AppContextSwitchOverrides> Element.

Konfigurieren der Sicherheit über die Windows-RegistrierungConfiguring security via the Windows Registry

Warnung

Das Festlegen von Registrierungsschlüsseln betrifft alle Anwendungen auf dem System.Setting registry keys affects all applications on the system. Verwenden Sie diese Option nur, wenn Sie die vollständige Kontrolle über den Computer innehaben und die Änderungen an der Registrierung kontrollieren können.Use this option only if you are in full control of the machine and can control changes to the registry.

Wenn die Einstellung mindestens eines AppContext-Switches nicht möglich ist, können Sie die Sicherheitsprotokolle für Ihre App mit den in diesem Abschnitt beschriebenen Windows-Registrierungsschlüsseln steuern.If setting one or both AppContext switches isn't an option, you can control the security protocols that your app uses with the Windows Registry keys described in this section. Möglicherweise können Sie einen oder beide AppContext-Switches nicht verwenden, wenn Ihre App unter .NET Framework-Version 4.5.2 oder früheren Versionen ausgeführt wird oder Sie die Konfigurationsdatei nicht bearbeiten können.You might not be able to use one or both the AppContext switches if your app runs on .NET Framework 4.5.2 or earlier versions, or if you can't edit the configuration file. Wenn Sie die Sicherheit mit der Registrierung konfigurieren möchten, geben Sie keinen Sicherheitsprotokollwert in Ihrem Code an; dies würde die Registrierungseinstellung außer Kraft setzen.If you want to configure security with the registry, don't specify a security protocol value in your code; doing so overrides the registry setting.

Die Namen der Registrierungsschlüssel ähneln den Namen der entsprechenden AppContext-Switches, jedoch ohne DontEnable vor dem Namen.The names of the registry keys are similar to the names of the corresponding AppContext switches but without a DontEnable prepended to the name. Der AppContext-Switch DontEnableSchUseStrongCrypto ist beispielsweise der Registrierungsschlüssel SchUseStrongCrypto.For example, the AppContext switch DontEnableSchUseStrongCrypto is the registry key called SchUseStrongCrypto.

Diese Schlüssel sind in allen Versionen von .NET Framework verfügbar, für die es einen aktuellen Sicherheitspatch gibt.These keys are available in all .NET Framework versions for which there's a recent security patch. Siehe Sicherheitsupdates.See Security updates.

Alle unten beschriebenen Registrierungsschlüssel haben den gleichen Effekt, unabhängig davon, ob Sie HTTP-Netzwerke (ServicePointManager) oder TCP-Socketnetzwerke (SslStream) betreiben.All of the registry keys described below have the same effect whether you're doing HTTP networking (ServicePointManager) or TCP sockets networking (SslStream).

SchUseStrongCryptoSchUseStrongCrypto

Der Registrierungsschlüssel HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SchUseStrongCrypto hat einen Wert vom Typ DWORD.The HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SchUseStrongCrypto registry key has a value of type DWORD. Der Wert 1 bewirkt, dass Ihre App eine starke Kryptographie verwendet.A value of 1 causes your app to use strong cryptography. Bei der starken Kryptographie werden sicherere Netzwerkprotokolle (TLS 1.2, TLS 1.1 und TLS 1.0) verwendet und nicht sichere Protokolle blockiert.The strong cryptography uses more secure network protocols (TLS 1.2, TLS 1.1, and TLS 1.0) and blocks protocols that are not secure. Der Wert 0 deaktiviert die starke Kryptographie.A value of 0 disables strong cryptography. Weitere Informationen finden Sie unter Das Flag SCH_USE_STRONG_CRYPTO.For more information, see The SCH_USE_STRONG_CRYPTO flag.

Wenn Ihre App unter .NET Framework 4.6 oder höhere Versionen abzielt, wird dieser Schlüssel standardmäßig auf 1 gesetzt.If your app targets .NET Framework 4.6 or later versions, this key defaults to a value of 1. Das ist der empfohlene sichere Standard.That's a secure default that we recommend. Wenn Ihre App unter .NET Framework 4.6 ausgeführt wird, aber auf eine frühere Version abzielt, wird der Schlüssel standardmäßig auf 0 gesetzt.If your app runs on .NET Framework 4.6, but targets an earlier version, then the key defaults to 0. In diesem Fall sollten Sie dessen Wert explizit auf 1 setzen.In that case, you should explicitly set its value to 1.

Dieser Schlüssel sollte nur dann den Wert 0 aufweisen, wenn Sie sich mit älteren Diensten verbinden müssen, die keine starke Kryptographie unterstützen und nicht aktualisiert werden können.This key should only have a value of 0 if you need to connect to legacy services that don't support strong cryptography and can't be upgraded.

SystemDefaultTlsVersionsSystemDefaultTlsVersions

Der Registrierungsschlüssel HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SystemDefaultTlsVersions hat einen Wert vom Typ DWORD.The HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SystemDefaultTlsVersions registry key has a value of type DWORD. Der Wert 1 bewirkt, dass in Ihrer App das Protokoll vom Betriebssystem ausgewählt werden kann.A value of 1 causes your app to allow the operating system to choose the protocol. Der Wert 0 bewirkt, dass Ihre App Protokolle verwendet, die vom .NET Framework ausgewählt wurden.A value of 0 causes your app to use protocols picked by the .NET Framework.

<VERSION> muss v4.0.30319 (für .NET Framework 4 und höher) oder v2.0.50727 (für .NET Framework 3.5) sein.<VERSION> must be v4.0.30319 (for .NET Framework 4 and above) or v2.0.50727 (for .NET Framework 3.5).

Wenn Ihre App unter .NET Framework 4.7 oder höhere Versionen abzielt, wird dieser Schlüssel standardmäßig auf 1 gesetzt.If your app targets .NET Framework 4.7 or later versions, this key defaults to a value of 1. Das ist der empfohlene sichere Standard.That's a secure default that we recommend. Wenn Ihre App unter .NET Framework 4.7 oder höheren Versionen ausgeführt wird, aber auf eine frühere Version abzielt, wird der Schlüssel standardmäßig auf 0 gesetzt.If your app runs on .NET Framework 4.7 or later versions, but targets an earlier version, the key defaults to 0. In diesem Fall sollten Sie dessen Wert explizit auf 1 setzen.In that case, you should explicitly set its value to 1.

Weitere Informationen finden Sie unter Kumulatives Update für Windows 10 Version 1511 und Windows Server 2016 Technical Preview 4: 10. Mai 2016.For more info, see Cumulative Update for Windows 10 Version 1511 and Windows Server 2016 Technical Preview 4: May 10, 2016.

Weitere Informationen für die Verwendung mit .NET Framework 3.5.1 finden Sie unter Unterstützung für Standardversionen des TLS-Systems im .NET Framework 3.5.1 unter Windows 7 SP1 und Server 2008 R2 SP1.For more information with .NET framework 3.5.1, see Support for TLS System Default Versions included in .NET Framework 3.5.1 on Windows 7 SP1 and Server 2008 R2 SP1.

Die folgende .REG-Datei legt die Registrierungsschlüssel und deren Varianten auf die sichersten Werte fest:The following .REG file sets the registry keys and their variants to their most safe values:

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

Konfigurieren von Schannel-Protokollen in der Windows-RegistrierungConfiguring Schannel protocols in the Windows Registry

Sie können die Registrierung verwenden, um die Protokolle, die Ihre Client- und/oder Server-App aushandelt, genau zu steuern.You can use the registry for fine-grained control over the protocols that your client and/or server app negotiates. Die Vernetzung Ihrer App erfolgt über Schannel (eine andere Bezeichnung für Secure Channel).Your app's networking goes through Schannel (which is another name for Secure Channel. Durch die Konfiguration von Schannel können Sie das Verhalten Ihrer App konfigurieren.By configuring Schannel, you can configure your app's behavior.

Beginnen Sie mit dem Registrierungsschlüssel HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols.Start with the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols registry key. Unter diesem Schlüssel können Sie beliebige Unterschlüssel im Satz SSL 2.0, SSL 3.0, TLS 1.0, TLS 1.1 und TLS 1.2 anlegen.Under that key you can create any subkeys in the set SSL 2.0, SSL 3.0, TLS 1.0, TLS 1.1, and TLS 1.2. Unter jedem dieser Unterschlüssel können Sie die Unterschlüssel Client und/oder Server anlegen.Under each of those subkeys, you can create subkeys Client and/or Server. Unter Client und Server können Sie die DWORD-Werte DisabledByDefault (0 oder 1) und Enabled (0 oder 0xFFFFFFFF) anlegen.Under Client and Server, you can create DWORD values DisabledByDefault (0 or 1) and Enabled (0 or 0xFFFFFFFF).

Das Flag SCH_USE_STRONG_CRYPTOThe SCH_USE_STRONG_CRYPTO flag

Wenn es aktiviert ist (standardmäßig durch einen AppContext-Switch oder durch die Windows-Registrierung), verwendet .NET Framework das Flag SCH_USE_STRONG_CRYPTO, wenn Ihre App ein TLS-Sicherheitsprotokoll anfordert.When it's enabled (by default, by an AppContext switch, or by the Windows Registry), the .NET Framework uses the SCH_USE_STRONG_CRYPTO flag when your app requests a TLS security protocol. Das Flag SCH_USE_STRONG_CRYPTO kann standardmäßig mit dem AppContext-Switch oder mit der Registrierung aktiviert werden.The SCH_USE_STRONG_CRYPTO flag can be enabled by default, with the AppContext switch, or with the Registry. Das Betriebssystem übergibt das Flag an Schannel und weist es an, bekannte schwache Kryptografiealgorithmen, Verschlüsselungssuiten und TLS/SSL-Protokollversionen zu deaktivieren, die andernfalls für eine bessere Interoperabilität aktiviert werden könnten.The OS passes the flag to Schannelto instruct it to disable known weak cryptographic algorithms, cipher suites, and TLS/SSL protocol versions that may be otherwise enabled for better interoperability. Weitere Informationen finden Sie unter:For more information, see:

Das Flag SCH_USE_STRONG_CRYPTO wird ebenfalls an Schannel übergeben, wenn Sie explizit die Enumerationswerte Tls (TLS 1.0), Tls11 oder Tls12 von SecurityProtocolType oder SslProtocols verwenden.The SCH_USE_STRONG_CRYPTO flag is also passed to Schannel when you explicitly use the Tls (TLS 1.0), Tls11, or Tls12 enumerated values of SecurityProtocolType or SslProtocols.

SicherheitsupdatesSecurity updates

Die bewährten Methoden in diesem Artikel hängen von der Installation aktueller Sicherheitsupdates ab.The best practices in this article depend on recent security updates being installed. Diese Updates beinhalten die Möglichkeit, erweiterte Features von .NET Framework 4.7 und höher zu verwenden.These updates include the ability to use advanced .NET Framework 4.7 and later features. Aktuelle Sicherheitsupdates sind wichtig, wenn Ihre App unter .NET Framework 4.7 und höheren Versionen läuft (auch wenn sie auf eine frühere Version abzielt).Recent security updates are important if your app runs on .NET Framework 4.7 and later versions (even if it targets an earlier version).

Um .NET Framework zu aktualisieren, damit das Betriebssystem die beste Version von TLS verwenden kann, müssen mindestens folgende Installationsanforderungen erfüllt sein:To update the .NET Framework to allow the operating system to choose the best version of TLS to use, you must install at least:

Siehe auch:See also:

Unterstützung für TLS 1.2Support for TLS 1.2

Damit Ihre App TLS 1.2 aushandeln kann, müssen sowohl das Betriebssystem als auch die .NET Framework-Version TLS 1.2 unterstützen.For your app to negotiate TLS 1.2, the OS and the .NET Framework version both need to support TLS 1.2.

Betriebssystemanforderungen zur Unterstützung von TLS 1.2Operating system requirements to support TLS 1.2

Um TLS 1.2 und/oder TLS 1.1 auf einem System, das sie unterstützt, zu aktivieren oder erneut zu aktivieren, siehe Transport Layer Security (TLS)-Registrierungseinstellungen.To enable or re-enable TLS 1.2 and/or TLS 1.1 on a system that supports them, see Transport Layer Security (TLS) registry settings.

BetriebssystemOS TLS 1.2-UnterstützungTLS 1.2 support
Windows 10Windows 10
Windows Server 2016Windows Server 2016
Unterstützt und standardmäßig aktiviert.Supported, and enabled by default.
Windows 8.1Windows 8.1
Windows Server 2012 R2Windows Server 2012 R2
Unterstützt und standardmäßig aktiviert.Supported, and enabled by default.
Windows 8.0Windows 8.0
Windows Server 2012Windows Server 2012
Unterstützt und standardmäßig aktiviert.Supported, and enabled by default.
Windows 7 SP1Windows 7 SP1
Windows Server 2008 R2 SP1Windows Server 2008 R2 SP1
Unterstützt und nicht standardmäßig aktiviert.Supported, but not enabled by default. Weitere Informationen zum Aktivieren von TLS 1.2 finden Sie auf der Webseite Transport Layer Security (TLS)-Registrierungseinstellungen.See the Transport Layer Security (TLS) registry settings web page for details on how to enable TLS 1.2.
Windows Server 2008Windows Server 2008 Für Unterstützung für TLS 1.2 und TLS 1.1 ist ein Update erforderlich.Support for TLS 1.2 and TLS 1.1 requires an update. Siehe Update zum Hinzufügen der Unterstützung von TLS 1.1 und TLS 1.2 in Windows Server 2008 SP2.See Update to add support for TLS 1.1 and TLS 1.2 in Windows Server 2008 SP2.
Windows VistaWindows Vista Wird nicht unterstützt.Not supported.

Informationen darüber, welche TLS/SSL-Protokolle auf den einzelnen Windows-Version standardmäßig aktiviert sind, finden Sie unter Protokolle in TLS/SSL (Schannel SSP).For information about which TLS/SSL protocols are enabled by default on each version of Windows, see Protocols in TLS/SSL (Schannel SSP).

Anforderungen zur Unterstützung von TLS 1.2 mit .NET Framework 3.5Requirements to support TLS 1.2 with .NET Framework 3.5

Diese Tabelle zeigt das Betriebssystemupdate, das Sie benötigen, um TLS 1.2 mit .NET Framework 3.5 zu unterstützen.This table shows the OS update you'll need to support TLS 1.2 with .NET Framework 3.5. Es wird empfohlen, alle Betriebssystemupdates zu installieren.We recommend you apply all OS updates.

BetriebssystemOS Erforderliches Mindestupdate zur Unterstützung von TLS 1.2 mit .NET Framework 3.5Minimum update needed to support TLS 1.2 with .NET Framework 3.5
Windows 10Windows 10
Windows Server 2016Windows Server 2016
Kumulatives Update für Windows 10 Version 1511 und Windows Server 2016 Technical Preview 4: 10. Mai 2016Cumulative Update for Windows 10 Version 1511 and Windows Server 2016 Technical Preview 4: May 10, 2016
Windows 8.1Windows 8.1
Windows Server 2012 R2Windows Server 2012 R2
Unterstützung für Standardversionen des TLS-Systems im .NET Framework 3.5 unter Windows 8.1 und Windows Server 2012 R2Support for TLS System Default Versions included in the .NET Framework 3.5 on Windows 8.1 and Windows Server 2012 R2
Windows 8.0Windows 8.0
Windows Server 2012Windows Server 2012
Unterstützung für Standardversionen des TLS-Systems im .NET Framework 3.5 unter Windows Server 2012Support for TLS System Default Versions included in the .NET Framework 3.5 on Windows Server 2012
Windows 7 SP1Windows 7 SP1
Windows Server 2008 R2 SP1Windows Server 2008 R2 SP1
Unterstützung für Standardversionen des TLS-Systems im .NET Framework 3.5.1 unter Windows 7 SP1 und Windows Server 2008 R2 SP1Support for TLS System Default Versions included in the .NET Framework 3.5.1 on Windows 7 SP1 and Server 2008 R2 SP1
Windows Server 2008Windows Server 2008 Unterstützung für Standardversionen des TLS-Systems im .NET Framework 2.0 SP2 unter Windows Vista SP2 und Windows Server 2008 SP2Support for TLS System Default Versions included in the .NET Framework 2.0 SP2 on Windows Vista SP2 and Server 2008 SP2
Windows VistaWindows Vista Nicht unterstütztNot supported

Azure Cloud ServicesAzure Cloud Services

Wenn Sie Web- und Workerrollen von Azure Cloud Services zum Hosten und Ausführen Ihrer Anwendung verwenden, gibt es einige Aspekte, die Sie für die Unterstützung von TLS 1.2 berücksichtigen müssen.If you are using Azure Cloud Services Web and Worker roles to host and run your application, there are some considerations that you need to take into account to support TLS 1.2.

.NET Framework 4.7 ist nicht standardmäßig auf dem Azure-Gastbetriebssystem installiert.NET Framework 4.7 is not installed on Azure Guest OS by default

In der aktuellen Version der Azure-Gastbetriebssystemfamilie 5 (Windows Server 2016) ist die neueste Version 4.6.2 installiert.The latest version installed in the latest Azure Guest OS Family 5 release (Windows Server 2016) is 4.6.2. Um zu sehen, welche Versionen von .NET Framework auf jedem Azure-Gastbetriebssystem installiert sind, lesen Sie die Azure-Gastbetriebssystemversionen und SDK-Kompatibilitätsmatrix.To see which versions of .NET Framework are installed on each Azure Guest OS, see the Azure Guest OS releases and SDK compatibility matrix.

Wenn Ihre App auf eine .NET Framework-Version abzielt, die in der Azure-Gastbetriebssystemversion nicht verfügbar ist, dann müssen Sie diese selbst installieren.If your app targets a .NET Framework version that is not available on the Azure Guest OS version, then you need to install it yourself. Siehe Installieren von .NET in Rollen in Azure Cloud Services.See Install .NET on Azure Cloud Service Roles. Wenn die Framework-Installation einen Neustart erfordert, können auch die Dienstrollen neu gestartet werden, bevor sie in den Bereit-Zustand versetzt werden.If the framework installation requires a restart, the service roles might also restart before entering the Ready state.

Registrierungseinstellungen für das Azure-GastbetriebssystemAzure Guest OS registry settings

Das Image der Azure-Gastbetriebssystem-Familie 5 für Azure Cloud Services hat bereits den Registrierungsschlüssel SchUseStrongCrypto auf den Wert „1“ festgelegt.The Azure Guest OS Family 5 image for Azure Cloud Services already has the SchUseStrongCrypto registry key set to a value of 1. Weitere Informationen finden Sie unter SchUseStrongCrypto.For more information, see SchUseStrongCrypto.

Legen Sie den Registrierungsschlüssel SystemDefaultTlsVersions auf 1 fest.Set the SystemDefaultTlsVersions registry key to 1. Siehe Konfigurieren der Sicherheit über die Windows-Registrierung.See Configuring security via the Windows Registry.