Ich versuche, der Datei Global.asax in einem Websiteprojekt die folgende Codezeile hinzuzufügen.
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
Die vs2012 IntelliSense zeigt, dass die Definition von Tls12 vorhanden ist. Der Build besagt jedoch, dass die Definition nicht existiert (siehe Screenshot).
Ich habe versucht, System.Net.dll zum Ordner "bin" des Projekts hinzuzufügen, aber der Build schlug fehl. Irgendeine Idee, wie ich das lösen könnte?
Sind Sie auf .net 4.0? Sie sollten mindestens 4,5 sein, um es zu benutzen. Sie können versuchen, die Version Ihres Web-Target-Frameworks zu aktualisieren: TLS 1.2 in .NET Framework 4.0
Enumerationswerte für SecurityProtocolType.Tls11 und SecurityProtocolType.Tls12 fehlen nur unter Framework 4.0.
Numerische Werte für SecurityProtocolType:
SystemDefault (0)
Ssl3 (48 - 0x30)
Tls (192 - 0xC0)
Tls11 (768 - 0x300) fehlt in Framework 4.0
Tls12 (3072 - 0xC00) fehlt in Framework 4.0
Wenn Sie unter Framework 4.0 TLS 1.0, 1.1 und 1.2 zulassen möchten, ersetzen Sie einfach Folgendes:
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12
durch:
(SecurityProtocolType)(0xc0 | 0x300 | 0xc00)
Über Ihre Bedenken, welche Version von TLS Ihre Anwendung (Client) und der Server, den Sie verbinden möchten, verwenden werden.
Direkt aus dem RFC 5246-Standard für TLS zitiert.
Während ClientHello
(erste Anforderung des Clients an den Server)
Die Version des TLS-Protokolls, mit der der Client während dieser Sitzung kommunizieren. Dies sollte die neueste sein (am höchsten bewertete) vom Client unterstützte Version.
Während ServerHello
(erste Anforderung, mit der der Server antwortet)
Dieses Feld enthält den unteren Wert des vom Client vorgeschlagenen im Client hallo und der höchste vom Server unterstützt.
ClientHello
und ServerHello
sind Strukturen mit Feldern, die im Standard hier beschrieben werden.
TL; DR
Bei Verwendung von System.Net.WebRequest
verhandelt Ihre Anwendung mit dem Server, um die höchste TLS-Version zu ermitteln, die sowohl von Ihrer Anwendung als auch vom Server unterstützt wird, und verwendet diese.
Was Ihre Frage betrifft.
Die Website ist bereits auf .NET 4.5. Durch ein späteres manuelles Aktualisieren der Kompilierung> TargetFramework von 4.0 auf 4.5 wurde das Problem behoben.
Hier ist die aktualisierte Konfiguration
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add Assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add Assembly="System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
</assemblies>
</compilation>