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.
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; // comparable to modern browsersvar 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
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.
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.
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
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.
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.
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:
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.
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.
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.
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 :(
Antworten:
Genau festgestellt , dass .NET Framework 4.5 unterstützt jetzt TLSv1.2
http://msdn.microsoft.com/en-us/library/system.security.authentication.sslprotocols(v=vs.110).aspx
quelle
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();
Aus der Box, wird WebRequest verwenden TLS 1.0 oder SSL 3 .
quelle
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
quelle
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
quelle
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:
quelle
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.
quelle
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
quelle
.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.
quelle
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.
quelle
Wie hier erwähnt , können Sie einfach diese Zeile hinzufügen
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
quelle