2017-07-28 300 views
13

我需要使用TLS 1.2從我的.NET Web服務連接到另一個要強制TLS 1.2的服務。我發現一個資源,說.NET 4.6默認使用TLS 1.2,這聽起來像最簡單的解決方案。我更新了服務器上的.NET框架並重新啓動。在IIS中,我嘗試使用.NET 4.6創建應用程序池,但4.0是唯一的選擇。然後,我發現有人說它仍然會說4.0,因爲4.6是.NET 4.0的「就地」更新。所以我想也許我完成了。然而,在我出於無關原因得到的錯誤頁面上,它說Microsoft .NET Framework Version:4.0.30319因此看起來我沒有成功升級。關於如何確保我的應用程序池使用.NET 4.6或更一般地如何啓用TLS 1.2的指針?更新.NET Web服務以使用TLS 1.2

+2

我相信TLS12必須在服務器上啓用。 https://support.quovadisglobal.com/kb/a433/how-to-enable-tls-1_2-on-windows-server-2008-r2.aspx – lcryder

+0

爲什麼downvotes? – nasch

回答

16

我們實際上剛剛將.NET Web服務升級到4.6以允許TLS 1.2。

阿爾喬姆所說的是我們所做的第一步。我們將Web服務的框架重新編譯爲4.6,我們嘗試更改註冊表項以啓用TLS 1.2,但這種方式無效:連接仍在TLS 1.0中。此外,我們不希望在機器上禁用SLL 3.0,TLS 1.0或TLS 1.1:其他Web服務可能會使用此功能;我們回滾了註冊表中的更改。

我們實際上改變了Web.Config文件來告訴IIS:「嘿,請運行我的4.6」。

下面是我們在web.config +反編譯,添加在.NET 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> 

而改爲TLS 1.2的連接,因爲IIS現在運行在4.6 Web服務(明確地說) 4.6默認使用TLS 1.2。

+0

下面是我們用於研究的文檔:[HTTPRuntime](https:// blogs .msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework /),[RenderingCompatibility](https://msdn.microsoft.com/en-us/library/system.web.ui .control.renderingcompatibility(v = vs.110).aspx) –

+0

我對web.config進行了這些更改,重建,部署,並且我得到了'System.Net.WebException:請求失敗,返回一個空響應。我不知道它是從我的結尾還是另一邊的問題。任何想法如何驗證我正在使用TLS 1.2? – nasch

+0

您可以使用網絡協議分析器,如[Wireshark](https://www.wireshark.org/)來驗證您的連接狀態。 –

6

添加以下代碼實例化Web服務客戶端之前:

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

是的,我已經這樣做了,但錯誤消息仍然表明.NET 4.0。 – nasch

+6

這是您的CLR版本。 .Net CLR有兩個版本,2.0和4.0。在IIS中,您指定CLR版本,而不是Framework版本。 IIS不會告訴你.Net 4.6,因爲它不關心這一點。如果你使用4.6編譯,那麼你使用的是4.6。 – Amy

4

三個步驟需要:

  1. 明確標註SSL2.0,TLS1.0,TLS1.1爲禁止上您的服務器機器,將Enabled=0DisabledByDefault=1添加到您的註冊表中(完整路徑爲HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols)。見屏幕細節 registry

  2. 按照從1中的步驟只是分別使用Enabled=1DisabledByDefault=0明確啓用TLS1.2

注意:驗證服務器版本:Windows Server 2003不支持TLS 1.2協議

  • 僅在應用程序級別啓用TLS1.2,像@約翰吳上面所建議的。

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

  • 希望本指南幫助。

    +1

    官方參考 - https://technet.microsoft.com/en-us/library/dn786418(v=ws.11).aspx#BKMK_SchannelTR_TLS12 – Subbu