2017-07-28 4 views
13

Ich muss TLS 1.2 verwenden, um eine Verbindung von meinem .NET-Webdienst zu einem anderen herzustellen, der TLS 1.2 erzwingen wird. Ich fand eine Ressource, die besagt, dass .NET 4.6 standardmäßig TLS 1.2 verwendet, so dass es wie die einfachste Lösung klang. Ich habe das .NET Framework auf dem Server aktualisiert und neu gestartet. In IIS habe ich versucht, einen Anwendungspool mit .NET 4.6 zu erstellen, aber 4.0 war die einzige Option. Dann fand ich etwas, das sagte, dass es noch 4.0 sagen würde, weil 4.6 ein "in Stelle" Update zu .NET 4.0 ist. Also dachte ich, ich wäre vielleicht fertig. Aber auf einer Fehlerseite, die ich aus nicht miteinander verbundenen Gründen bekam, hieß es Microsoft .NET Framework Version:4.0.30319, also scheint es, dass ich nicht erfolgreich aufgerüstet habe. Gibt es Hinweise darauf, wie Sie sicherstellen können, dass mein Anwendungspool .NET 4.6 verwendet, oder allgemeiner gesagt, wie Sie TLS 1.2 aktivieren?.NET-Webdienst für die Verwendung von TLS 1.2 aktualisieren

+2

Ich glaube, dass TLS12 auf dem Server aktiviert sein muss. https://support.quovadisglobal.com/kb/a433/how-to-enable-tls-1_2-on-windows-server-2008-r2.aspx – lcryder

+0

Warum die downvotes? – nasch

Antwort

16

Wir haben gerade einen .NET-Webdienst auf 4.6 aktualisiert, um TLS 1.2 zuzulassen.

Was Artem sagt, waren die ersten Schritte, die wir gemacht haben. Wir haben das Framework des Webdienstes auf 4.6 neu kompiliert und wir haben versucht, den Registrierungsschlüssel zu ändern, um TLS 1.2 zu aktivieren, obwohl dies nicht funktionierte: Die Verbindung befand sich immer noch in TLS 1.0. Außerdem wollten wir SLL 3.0, TLS 1.0 oder TLS 1.1 nicht auf der Maschine verbieten: andere Webdienste könnten dies verwenden; Wir rolle unsere Änderungen in der Registrierung zurück.

Wir haben tatsächlich die Web.Config-Dateien geändert, um IIS zu sagen: "Hey, lass mich in 4.6 bitte".

Hier die Änderungen ist, die wir in der web.config + Neuübersetzung in .NET hinzugefügt 4.6:

<system.web> 
    <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 --> 

    <!--Added this httpRuntime --> 
    <httpRuntime targetFramework="4.6" /> 

    <authentication mode="Windows"/> 
    <pages controlRenderingCompatibilityVersion="4.0"/> 
</system.web> 

und die Verbindung geändert TLS 1.2, da IIS nun den Web-Service in 4.6 läuft (sagte ausdrücklich) und 4.6 verwendet TLS 1.2 standardmäßig.

+0

Hier ist die Dokumentation, die wir für die Recherche verwendet haben: [HTTPRuntime] (https: // blogs .msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework /), [RenderingCompatibility] (https://msdn.microsoft.com/de-de/library/system.web.ui .control.renderingcompatibility (v = vs.110) .aspx) –

+0

Ich habe diese Änderungen an meiner web.config vorgenommen, neu erstellt, implementiert und ich bekomme 'System.Net.WebException: Die Anfrage ist mit einer leeren Antwort fehlgeschlagen.' Ich weiß nicht, ob es von meinem Ende oder einem Problem auf der anderen Seite ist. Irgendeine Idee, wie man überprüft, dass ich TLS 1.2 verwende? – nasch

+0

Sie können einen Netzwerkprotokollanalysator wie [Wireshark] (https://www.wireshark.org/) verwenden, um den Status Ihrer Verbindung zu überprüfen. –

6

den folgenden Code hinzufügen, bevor Sie Ihren Web-Service-Client instanziiert:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 
+0

Ja, ich mache das schon, aber die Fehlermeldung zeigt immer noch .NET 4.0 an. – nasch

+6

Das ist Ihre CLR-Version. Die .Net CLR hat zwei Versionen, 2.0 und 4.0. In IIS geben Sie die CLR-Version und nicht die Framework-Version an. IIS wird Ihnen .Net 4.6 nicht sagen, weil es das nicht interessiert. Wenn Sie mit 4.6 kompiliert haben, verwenden Sie 4.6. – Amy

4

drei Schritte erforderlich:

  1. markieren Explizit SSL2.0, TLS1.0, TLS1.1 als verboten, Ihr Server-Computer, indem Sie Enabled=0 und DisabledByDefault=1 zu Ihrer Registrierung hinzufügen (der vollständige Pfad ist HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols). Siehe Bildschirm für Details registry

  2. Explizit TLS1.2 aktivieren, indem Sie die Schritte von 1. Verwenden Sie einfach Enabled=1 und DisabledByDefault=0 sind.

ANMERKUNG: überprüfen Server-Version: Windows Server 2003 nicht das TLS 1.2 Protokoll

  1. aktivieren TLS1.2 nur auf App-Ebene, wie @ John Wu oben vorgeschlagen unterstützt.

    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Hoffnung dieser Leitfaden hilft.

+1

Offizielle Referenz - https://technet.microsoft.com/en-us/library/dn786418(v=ws.11).aspx#BKMK_SchannelTR_TLS12 – Subbu