it-swarm.com.de

.Net Framework 4.6.1 nicht standardmäßig auf TLS 1.2 eingestellt

Unser Client hat kürzlich das Sicherheitsprotokoll auf TLS 1.2 aktualisiert. Daher haben wir unsere Anwendung auf 4.6.1 aktualisiert, wobei erwartet wird, dass das Sicherheitsprotokoll standardmäßig auf TLS 1.2 eingestellt ist. Irgendeine Idee warum?

33
Harihara Iyer

Ich hatte ein ähnliches Problem und das hat bei mir funktioniert.

  1. powershell öffnen und mit [Net.ServicePointManager]::SecurityProtocol nach unterstützten Protokollen suchen 

  2. Führen Sie die folgenden 2 Cmdlets aus, um die Registrierungsschlüssel für .NET Framework Strong Cryptography festzulegen: /: 

    starke Kryptographie auf 64 Bit .Net Framework (Version 4 und höher) setzen

    Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord

    starke Kryptographie auf 32 Bit .Net Framework (Version 4 und höher) setzen

    Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord

  3. Starten Sie Powershell neu und überprüfen Sie das unterstützte Protokoll erneut mit [Net.ServicePointManager]::SecurityProtocol

Es sollte jetzt auch Tls12 angezeigt werden.

Hoffe das hilft

37
Kartik Gupta

Wie bereits erwähnt, gibt es eine Reihe von Windows-Registrierungsschlüsseln, die festgelegt werden müssen, um TLS 1.2 in vorhandenen .NET-Anwendungen zu aktivieren, ohne die Protokollversion explizit im Anwendungscode festzulegen. 

Um mit .NET 4.x-Code das stärkste verfügbare Protokoll auswählen zu können (standardmäßig wenn ein Protokoll nicht explizit im Code angegeben ist), werden die folgenden Registrierungsschlüssel benötigt:

Bei 32-Bit- und 64-Bit-Versionen von Windows: HKLM\SOFTWARE\Microsoft\.NETFramework\4.0.30319\SchUseStrongCrypto: 0X00000001

Bei 64-Bit-Versionen von Windows: HKLM\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\4.0.30319\SchUseStrongCrypto: 0X00000001

Der Wert " WOW6432Node " wird benötigt, um TLS 1.2 in 32-Bit-Anwendungen zu aktivieren, wenn es auf 64-Bit-Systemen ausgeführt wird.

Hier ist jedoch die schnelle und einfache Lösung: https://github.com/TheLevelUp/pos-tls-patcher

Update:

Wenn Sie mit .NET 4.6 oder 4.7 arbeiten, sind Sie an den bewährten Vorgehensweisen von Transport Layer Security (TLS) mit .NET Framework interessiert. 

Beachten Sie, dass TLS Patcher linked oben den Empfehlungen von Microsoft für vorhandene .NET 4.0- und 4.5-Apps, die kein Ziel von .NET 4.6 oder höher sein können, sehr folgt.

16
user24601

Der Grund, warum das Sicherheitsprotokoll nicht standardmäßig auf TLS 1.2 eingestellt ist, liegt darin, dass es in .NET Framework 4.6.1 keinen Standardwert dafür gibt. Tut mir leid, wenn dies wiederholt wird, was bereits gesagt wurde, aber ich wollte es näher erläutern, und ich habe nicht genug Ruf, um einen Kommentar abzugeben.

Es gibt auch keinen Standardwert in 4.6.2. Wie bei einem der oben genannten Kommentatoren scheint jedoch eine Konsolenanwendung auf TLS 1.2 zu setzen. Ich habe den gleichen Code in einem Website-Projekt ausprobiert, das auf 4.6.2 abzielt. Der Standardwert war NICHT TLS 1.2. 

4.7 und höher haben einen Standardwert von SecurityProtocolType.SystemDefault.

"Dies ermöglicht .NET Framework-Netzwerk-APIs, die auf SslStream basieren (wie FTP, HTTP und SMTP), die Standardsicherheitsprotokolle vom Betriebssystem oder von benutzerdefinierten Konfigurationen, die von einem Systemadministrator ausgeführt werden, erben."

https://docs.Microsoft.com/de-de/dotnet/api/system.net.servicepointmanager.securityprotocol?view=netframework-4.7#System_Net_ServicePointManager_SecurityProtocol

14
Gabe

MSDN: ServicePointManager.SecurityProtocol-Eigenschaft

Diese Eigenschaft wählt die Version von Secure Sockets Layer (SSL) oder .__ aus. TLS-Protokoll (Transport Layer Security) für neue Verbindungen die nur das HTTPS-Schema (Secure Hypertext Transfer Protocol) verwenden; bestehende Verbindungen werden nicht geändert. Beachten Sie, dass kein Standardwert .__ ist. für diese Eigenschaft absichtlich aufgeführt.

Die Sicherheitslandschaft ändert sich ständig und die Standardprotokolle und Schutzstufen werden im Laufe der Zeit geändert, um bekannte .__ zu vermeiden. Schwächen. Die Standardeinstellungen hängen von der jeweiligen Maschine ab Konfiguration und auf welcher Software installiert ist und auf welcher Patches wurden angewendet.

Aus hier

5
Camille G.

Ich stand auch vor dem Problem. Beim Versuch der lokalen Anwendung, eine Verbindung zu einem Server herzustellen, der TLS 1.1 und TLS 1.2 unterstützt, erhält sie die Ausnahme "Eine vorhandene Verbindung wurde vom Remote-Host zwangsweise geschlossen.". Oder wenn TLS 1.1/1.2 nicht ordnungsgemäß aktiviert wurde "Win32Exception: Der Client und der Server können nicht kommunizieren, da sie keinen gemeinsamen Algorithmus besitzen."

Nachfolgend sind alle Registrierungsschlüssel und -werte aufgeführt, die für das x64-Windows-Betriebssystem ..__ benötigt werden. Wenn Sie ein 32-Bit-Betriebssystem (x86) haben, entfernen Sie einfach die letzten 2 Zeilen . TLS 1.0 wird vom Registrierungsskript ..__ deaktiviert. Ein Neustart des Betriebssystems ist erforderlich. 

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
"DisabledByDefault"=dword:00000001
"enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\server]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\ssl 3.0]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\ssl 3.0\client]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\ssl 3.0\server]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.0]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.0\client]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.0\server]
"disabledbydefault"=dword:00000001
"enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.1]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.1\client]
"disabledbydefault"=dword:00000000
"enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.1\server]
"disabledbydefault"=dword:00000000
"enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.2]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.2\client]
"disabledbydefault"=dword:00000000
"enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\tls 1.2\server]
"disabledbydefault"=dword:00000000
"enabled"=dword:00000001

[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
3
Mikhail Titov

Ich habe die folgenden Schritte ausgeführt, um das neueste Sicherheitsprotokoll TLS v.1.2 zu verwenden:

Deaktivieren Sie die alten Protokolle SSL2.0, SSL3.0, TLS1.0, TLS1.1, aktivieren Sie TLS1.2 und aktivieren Sie starke Verschlüsselung für .NET Framework in der Registrierung.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server]
"DisabledByDefault"=dword:00000001
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
"DisabledByDefault"=dword:00000001
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
"DisabledByDefault"=dword:00000001
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
"DisabledByDefault"=dword:00000001
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
"DisabledByDefault"=dword:00000001
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
"DisabledByDefault"=dword:00000001
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
"DisabledByDefault"=dword:00000001
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
"DisabledByDefault"=dword:00000001
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

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

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

Ich habe dies in meinem Code auf der Startseite verwendet. Bei der App handelt es sich um Webformulare in VB.NET mit .NET Framework 4.6.1

System.Net.ServicePointManager.SecurityProtocol =  System.Net.SecurityProtocolType.Tls12
0
Glada

Beim Hosten unserer .NET 4.6.2-Anwendung in IIS ist ein ähnliches Problem aufgetreten.

Wir könnten das Problem lösen, indem Sie das Element httpRuntime zur web.config hinzufügen. Andernfalls ist unser Dienst nicht standardmäßig auf TLS 1.2 eingestellt. 

<httpRuntime targetFramework="4.6.2" />

Weitere Informationen finden Sie unter https://docs.Microsoft.com/de-de/dotnet/api/system.web.configuration.httpruntimesection?view=netframework-4.7.2

0