webentwicklung-frage-antwort-db.com.de

System.Net.SecurityProtocolType.Tls12-Definition nicht gefunden

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). 

 screen shot

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?

3
HockChai Lim

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

9
Teoman shipahi

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)
9
figolu

Ü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.

  • Sie finden die unterstützten TLS-Protokollversionen von .NET hier , aber überprüfen Sie die von Ihnen verwendete .NET Framework-Version, und navigieren Sie zur richtigen Version im msdn.
0
kuskmen

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>
0
krishna kanth