2017-06-29 226 views
0

取消激活我們的Web服務器上的TLS 1.0以使用TLS 1.2。之後,該網站在交易時確實存在問題。我試着像停用後的問題IIS 6上的TLS 1.0(Windows Server 2008r2)

  • 安裝不同的東西所有懸而未決的Windows更新
  • 升級IIS 6〜7版
  • 重新編譯整個項目爲4.5和重新導入它在IIS
  • 停用.NET 3特點在IIS
  • 更新所有項目的目標框架,以4.5
  • 控制的應用程序池,並將其設置爲V4.0(它應該使用4.5)

首先它看起來像是應用程序的問題。但後來我在VS的調試模式下嘗試項目,一切工作?與回退到SSL3而不是使用TLS 1.1或TLS 1.2的服務器相比。 (好像有缺少一些功能和通過的Technet命名的註冊表項是不夠的。)

我想問題也能像

(HttpApplication.cs)

    使用某些類的
  • 的System.Web
  • System.Web.Security

由於缺乏經驗,我得出的結論要問你這個問題。你有沒有更多的想法?

剛剛想到的其他一些東西:VS中有一個項目使用.NET 4.0。我改變了目標框架,然後項目確實遇到了一些問題,以找到一些命名空間。 (目前所有項目都有相同的目標框架(.Net))。命名空間確實存在,但VS無法找到它。所以我重建,清理解決方案,但它沒有幫助。然後我關閉VS並重新打開它。突然間這個項目奏效了。該屬性中的框架爲4.0。 (也許這也可能是一個問題?)

由於我受到時間的壓力,我很感激任何幫助。


編輯:有沒有簡單的方法來測試(TLS測試)和顯示使用的.Net版本?


EDIT2:找到了一個解決方案,用nuget包測試出框架。 http://haacked.com/archive/2010/12/05/asp-net-mvc-diagnostics-using-nuget.aspx/ (稍後會嘗試)

我還設法通過遠程調試逐步完成斷點,並找到發生故障的位置。有一個文件「References.cs」這個頭:

//------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated by a tool. 
//  Runtime Version:4.0.30319.18034 
// 
//  Changes to this file may cause incorrect behavior and will be lost if 
//  the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 
// This source code was auto-generated by Microsoft.VSDesigner, Version 4.0.30319.18034. 
// 
#pragma warning disable 1591 

其中該代碼創建的問題:

/// <remarks/> 
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace="http://....", ResponseNamespace="http://....", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] 
[return: System.Xml.Serialization.XmlElementAttribute("out", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
public PaymentResult SelectPayment([System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] uint merchantID, [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] string mdxi, [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] string getDataURL, [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] string tid) { 
object[] results = this.Invoke("SelectPayment", new object[] { 
        merchantID, 
        mdxi, 
        getDataURL, 
        tid}); 
return ((PaymentResult)(results[0])); 
} 

對象「結果」從來沒有得到的值。我按下F1,看看有什麼調用正在做與本網站打開:https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke);k(SolutionItemsProject);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5);k(DevLang-csharp)&rd=true


EDIT3:這似乎是調用是參考

System.Web.Services

但在該項目的版本是

運行時版本:v4.0.30319 版本:4.0.0.0

我覺得這是問題,因爲它應該是4.5 ...

System.Net.WebException:基礎連接已關閉:在發生意外的錯誤發送。 ---> System.IO.IOException:由於遠程方關閉了傳輸流,認證失敗。

+0

你的問題根本不清楚。你面臨的問題是什麼?請詳細說明,如有異常(堆棧跟蹤)等 –

回答

0

我終於能夠解決這個問題。我所做的就是增加一些的try-catch方法

try 
    { 
     result = SelectPayment(...); 
    } 
    catch (System.Web.Services.Protocols.SoapException e) 
    { 
     Logger.Error("[SelectPayment]: Can't Invoke XML Web service method synchronisly using " + e); 
    } 
    catch (System.InvalidOperationException e) 
    { 
     Logger.Error("[SelectPayment]: Can't Invoke XML Web service method synchronisly using " + e); 
    } 
return result; 

返回之前看到確切的錯誤信息

System.IO.IOException:身份驗證失敗,因爲遠程方已關閉傳輸流。

這是在Authentication failed because remote party has closed the transport stream

描述然後,我添加的代碼中的HTTP上的SOAP調用之前這條線(SelectPayment的嘗試前):

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

最後小時的節目做了之後工作! :)

這似乎是

運行時版本:v4.0.30319版本:4.0.0.0

使用總是TLS 1.0默認情況下,如果你不告訴他們,以使用TLS 1.2。從這個站點https://forums.iis.net/t/1189663.aspx?TLS+1+1+or+1+2+on+IIS6+Win2003+

爲IIS6

進口信息IIS 7.5(Windows 7和Windows服務器2008 R2)是在MS平臺的唯一的網絡服務器,其支持TLS 1.1和TLS 1.2。