Gibt es eine .NET-Implementierung von TLS 1.2?

76

Da ich gerade festgestellt habe, dass für RFC 5425 TLS 1.2 erforderlich ist und .NET dies noch nicht unterstützt, frage ich mich, ob das TLS 1.2-Protokoll gemäß RFC 5246 möglicherweise Open Source implementiert ist.

usr-local-ΕΨΗΕΛΩΝ
quelle
Für .net 3.5 muss ein Flag hinzugefügt werden, um die Verwendung von TLS 1.2 zu erzwingen. Stackoverflow.com/a/44893192/2559297
D_Bester
Mögliches Duplikat von SSL und veraltetem TLS (1.0 und 1.1) für die Webdienst-Clientanwendung unter .Net 3.5 . Abstimmung, um diese ältere Frage zu schließen, weil sie etwas weniger aktuell ist.
Brian

Antworten:

78

Ja, obwohl Sie TLS 1.2 unter System.Net.ServicePointManager.SecurityProtocol manuell aktivieren müssen

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; // comparable to modern browsers
var response = WebRequest.Create("https://www.howsmyssl.com/").GetResponse();
var body = new StreamReader(response.GetResponseStream()).ReadToEnd();

Ihr Client verwendet TLS 1.2, die modernste Version des Verschlüsselungsprotokolls


Aus der Box, wird WebRequest verwenden TLS 1.0 oder SSL 3 .

Ihr Client verwendet TLS 1.0, das sehr alt ist, möglicherweise für BEAST-Angriffe anfällig ist und nicht über die besten verfügbaren Chiffresuiten verfügt. Ergänzungen wie AES-GCM und SHA256 als Ersatz für MD5-SHA-1 sind für einen TLS 1.0-Client sowie für viele weitere moderne Cipher Suites nicht verfügbar.

Oberst Panik
quelle
10
Ist es möglich, das SecurityProtocol über eine Einstellung in der app.exe.config anzugeben?
Jeffrey LeCours
Hängt dies nicht auch vom Betriebssystem / Server ab, auf dem die Anwendung ausgeführt wird, da dort der tatsächliche HTTP-Verkehr erstellt / empfangen wird?
Don Cheadle
Vielen Dank. Klappt wunderbar. Zu Ihrer Information, dies funktioniert auf Windows 2012 Server. Mir wurde gesagt, dass Windows 2008 TLS1.2 nicht unterstützt.
LT Dan
Sie sollten TLS1.2 unter 2008Svr verwenden können. Möglicherweise muss das dotNet 4.5-Framework installiert werden. Siehe: msdn.microsoft.com/en-us/library/8z6watww(v=vs.110).aspx
Toby
28

Sie können die Registrierungseinstellung SchUseStrongCrypto verwenden, damit alle .NET-Anwendungen standardmäßig TLS 1.2 anstelle von 1.0 verwenden müssen.

Windows Registry Editor Version 5.00

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

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
Jeffrey LeCours
quelle
8
Microsoft sollte diesen Wert in einem seiner Sicherheitsupdates wirklich aktualisieren. Ich kann nicht glauben, dass die Standardeinstellung darin besteht, SSL v3 zu aktivieren und TLS 1.2 zu deaktivieren, und das Update ist eine einfache Registrierungseinstellung.
Dana
.Net Framework 4.0 unterstützt TLS 1.1+ nicht, Framework 4.5 jedoch: fwk 4.0: msdn.microsoft.com/en-us/library/… fwk 4.5: msdn.microsoft.com/en-us/library/…
Negarrak
2
Es gibt jetzt (September 2016) eine Reihe verschiedener Framework-Versionen in der Registrierung (4.0.30319, 4.5, 4.5.1, 4.5.23026, 4.5.50709). Welches muss aktualisiert werden - oder alle?
GlennG
1
Die Antwort darauf ist unten - Sie müssen nur die 4.0.30319 einstellen.
Jason Steele
1
Es funktioniert unter Windows 2008 SP2 mit Microsoft Update KB4019276 . Weitere Infos hier: github.com/TheLevelUp/pos-tls-patcher
user24601
12

Ich habe mein Problem behoben, indem ich auf das neueste .Net Framework umgestellt habe. Ihr Ziel-Framework legt also Ihr Sicherheitsprotokoll fest.

wenn Sie dies in Web.config haben

<system.web>
  <httpRuntime targetFramework="4.5"/>
</system.web>

Sie erhalten dies standardmäßig:

ServicePointManager.SecurityProtocol = Ssl3 | Tls

wenn Sie dies in Web.config haben

<system.web>
  <httpRuntime targetFramework="4.6.1"/>
</system.web>

Sie erhalten dies standardmäßig:

ServicePointManager.SecurityProtocol = Tls12 | Tls11 | Tls
Eric
quelle
und NET 4.7.1 ?
Kiquenet
9

Laden Sie einfach diesen Registrierungsschlüssel herunter und führen Sie ihn aus. Der erforderliche Schlüssel wird zur .NET Framework-Registrierung hinzugefügt. Weitere Informationen erhalten Sie unter diesem Link . Suchen Sie in '.NET 4.5 bis 4.5.2' nach 'Option 2'.

Die Registrierungsdatei hängt Folgendes an die Registrierung an:

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

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

Dies ist der Teil der Seite, der nützlich ist, falls er kaputt geht:

Net.ServicePointManager.SecurityProtocol-Wert. ""

Samidjo
quelle
6
Hallo, ich habe Ihre Antwort so bearbeitet, dass sie den Inhalt der Registrierungsdatei enthält. Reg-Dateien gelten normalerweise als "sicherheitsrelevant", und erfahrene Systemadministratoren öffnen die erste Reg-Datei, die von einer anderen Person verlinkt wurde, nicht verbindlich (mit allem Respekt!). Ich denke, es wird auch eine großartige Idee sein, einen Teil des verlinkten Artikels gemäß der SO-Richtlinie zu zitieren (keine Nur-Link-Antworten - besser sagen "keine Antworten, die zu 100% von Links abhängen")
usr-local-ΕΨΗΕΛΩΝ
8

Wenn Sie mit älteren Versionen von .NET Framework arbeiten, ist die Unterstützung für TLS 1.2 in unserem SecureBlackbox-Produkt sowohl für Client- als auch für Serverkomponenten verfügbar . SecureBlackbox enthält eine eigene Implementierung aller Algorithmen, sodass es keine Rolle spielt, welche Version des .NET-basierten Frameworks Sie verwenden (einschließlich .NET CF) - Sie verfügen in allen Fällen über TLS 1.2 mit den neuesten Ergänzungen.

Beachten Sie, dass SecureBlackbox Framework-Klassen nicht auf magische Weise TLS 1.2 hinzufügt. Stattdessen müssen Sie SecureBlackbox-Klassen und -Komponenten explizit verwenden.

Eugene Mayevskis Rückruf
quelle
1
Open Source-Projekt bedeutet nicht unbedingt, dass Sie den gesamten Code öffnen müssen.
Eugene Mayevski 'Rückruf
1
Ich bin zu Recht der Meinung, dass dies die SSL-Anforderungen von PCI DSS 3.1 erfüllen wird. Dies wäre sehr nützlich, da es viele von XP abgeleitete Betriebssysteme gibt, die noch unter Microsoft Support stehen, aber .NET Framework 4.5 nicht ausführen können.
user1069816
1
@ user1069816 Ich bin nicht bereit, die Konformität offiziell zu bestätigen, bis wir die Anforderungen von PCI DSS 3.1 sorgfältig analysiert haben. Im Allgemeinen implementiert SecureBlackbox TLS 1.2 jedoch vollständig und kümmert sich um die neuesten sicherheitsrelevanten Erkenntnisse und enthält die entsprechenden Problemumgehungen.
Eugene Mayevski 'Rückruf
1
@ user1069816 Wir haben das PCI DSS 3.1 überprüft. Für PCI-DSS 3.1 müssen alle kompatiblen Umgebungen die Unterstützung für SSL- (2.0 und 3.0) und TLS 1.0-Versionen des Protokolls bis spätestens 30. Juni 2016 einstellen. Dies ist mit der SBB leicht zu erreichen, die TLS 1.1 und 1.2 sowie alle modernen Cipher Suites vollständig unterstützt.
Eugene Mayevski 'Rückruf
1
@ user1069816 Da SecureBlackbox eigene kryptografische und SSL / TLS-Engines verwendet, ist es nicht abhängig von den Besonderheiten der relevanten Funktionen, die vom Betriebssystem oder .NET Framework angeboten werden. Das heißt, Sie können sicherstellen, dass Ihre alten XP-Computer PCI-DSS-kompatibel bleiben, indem Sie Ihr WinAPI- oder .NET 2.0-basiertes Softwareprodukt auf SecureBlackbox migrieren.
Eugene Mayevski 'Rückruf
4

Die neueste Version von SSPI (im Lieferumfang von Windows 7 enthalten) enthält eine Implementierung von TLS 1.2, die in schannel.dll enthalten ist

Josh Stodola
quelle
Irgendwelche Anleitungen zur Verwendung in .NET?
Foson
@foson Es wird nicht schön sein, weil SChannel COM ist. Es ist eine C ++ Beispiel hier und einige sehr nützliche Hinweise hier
Josh Stodola
3

.NET Framework 4.6 verwendet standardmäßig TLS 1.2.

Darüber hinaus sollte sich in .NET 4.6 nur die Host-Anwendung befinden. In älteren Versionen verbleiben möglicherweise referenzierte Bibliotheken.

Anton Palyok
quelle
3

Sie können TLS 1.2 in IIS aktivieren, indem Sie diese Anweisungen befolgen . Ich gehe davon aus, dass dies ausreichen würde, wenn Sie eine ASP.NET-basierte Anwendung haben, die auf IIS ausgeführt wird, obwohl es so aussieht, als würde sie Ihren Anforderungen nicht wirklich entsprechen.

Justin Ethier
quelle
Entschuldigung, das trifft auf mich nicht zu. Ich schreibe eine Anwendung zum Ausführen des Syslog-Protokolls, das sehr weit von ASP.NET entfernt ist und reguläre Sockets-Programmierung verwendet. Leider benötige ich eine Klasse, die SslStream entspricht, um TLS 1.2-Dienste bereitzustellen :(
usr-local-ΕΨΗΕΛΩΝ
1
Dieser Link 403s jetzt, aber die neue URL scheint derekseaman.com/2010/06/… zu sein
Martin Costello
-1

Wie hier erwähnt , können Sie einfach diese Zeile hinzufügen

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
Bresleveloper
quelle
Dies gilt nur für .NET 4.0.
wp78de
Nicht wahr. Die Aufzählung richtet sich nach dem Betriebssystem. Es sei denn, Sie haben 4.5 oder höher als Sie die Aufzählung mit Namen.
Bresleveloper
Nicht wahr. Erstens hängt es von der .NET Framework-Zielversion ab. Wenn das Betriebssystem TLS 1.2 unterstützt, ist die zweite Frage.
wp78de