【问题标题】:Problems after deactivation TLS 1.0 on IIS 6 (Windows Server 2008r2)在 IIS 6 (Windows Server 2008r2) 上停用 TLS 1.0 后的问题
【发布时间】:2017-06-29 10:30:48
【问题描述】:

停用我们网络服务器上的 TLS 1.0 以使用 TLS 1.2。在那之后,当涉及到交易时,网站确实有问题。我尝试了不同的方法,例如

  • 已安装所有待处理的 Windows 更新
  • 将 IIS 6 升级到版本 7
  • 将整个项目重新编译为 4.5 并在 IIS 中重新导入
  • 停用 IIS 中的 .NET 3 功能
  • 将所有项目目标框架更新到 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 来查看 Invoke 在做什么,然后这个网站打开: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:看起来 Invoke 是参考

系统.Web.服务

但在项目中版本是

运行时版本:v4.0.30319 版本:4.0.0.0

我认为这是问题所在,因为它应该是 4.5...

System.Net.WebException:底层连接已关闭:发送时发生意外错误。 ---> System.IO.IOException: 身份验证失败,因为远程方已关闭传输流。

【问题讨论】:

  • 你的问题一点都不清楚。你面临的问题是什么?请提供详细信息,如果异常(堆栈跟踪)等。

标签: c# asp.net .net iis visual-studio-2015


【解决方案1】:

我终于能够解决这个问题。我所做的是在方法返回之前添加一些 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 Invoke 之前(在 SelectPayment 的尝试之前)添加了这一行:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

最后几个小时后,程序确实起作用了! :)

好像是

运行时版本:v4.0.30319 版本:4.0.0.0

如果您不告诉他们使用 TLS 1.2,则默认始终使用 TLS 1.0。

从该站点 https://forums.iis.net/t/1189663.aspx?TLS+1+1+or+1+2+on+IIS6+Win2003+ 导入的 IIS6 信息

IIS 7.5(Windows 7 和 Windows server 2008 R2)是 MS 平台上唯一支持 TLS 1.1 和 TLS 1.2 的 Web 服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2021-06-03
    • 1970-01-01
    • 2014-02-05
    相关资源
    最近更新 更多