【问题标题】:Twitter API responds with 'An existing connection was forcibly closed by the remote host'Twitter API 以“远程主机强制关闭现有连接”响应
【发布时间】:2019-12-07 19:51:07
【问题描述】:

我的公司有一些 dotNET 代码在过去三个月中一直在愉快地与 Twitter 的 API 对话,并在推特上发布我们的消息。

7 月 29 日,它停止工作,POST 请求遇到以下错误:
An existing connection was forcibly closed by the remote host
System.Net.Sockets.SocketException

我认为这是因为我们的服务器仍在使用 TLS 1.1,而我从 6 月才发现 this Twitter API announcement,上面写着:

自 2014 年移除 SSL 支持 104 以来,Twitter API 已 所有传入连接都需要至少 TLS 1.0。两个 TLS 1.0 和 1.1 在 2008 年被 TLS 1.2 取代。

从 2019 年 7 月 25 日开始,所有与 Twitter API 的连接(以及所有 其他 Twitter 域)将需要 TLS 1.2。这一变化将影响 API 的所有格式和层级(REST、流式传输和 webhook; 标准、高级、企业以及广告和媒体 API),以及 更广泛的 Twitter 平台。

我们似乎得到了 4 天的宽限期,因为我们的代码在 7 月 25 日至 28 日之间没有任何问题。

我相信服务器本身已经安装了 TLS 1.2,所以问题可能是这个项目是用默认使用 TLS 1.1 的 dotNET 4.0 编译的?

将我们的项目升级到 dotNET 4.5 会解决问题吗,还是可以解决其他问题?

【问题讨论】:

标签: .net twitter tls1.2


【解决方案1】:

同样的问题。当 Twitter 调用 ExternalLogin 时,调用失败。我认为这是一个 TLS 1.2 问题。由于用户未通过身份验证,因此此处失败(请参见下面的代码)。 Facebook Auth 不会触发新的 ChallengeResult,所以我知道它应该是这样工作的。

if (!User.Identity.IsAuthenticated)
{
  return new ChallengeResult(provider, this);
} 

我的 Asp.Net Web API 已针对 4.6.1,但运行时配置为 4.5。对我来说,解决方法是更新 Web.config 中的这一行并重建应用程序。

<system.Web>
<httpRuntime targetFramework="4.6.1" />
</system.Web>

在我进行此更改后,Twitter 身份验证窗口再次显示。

注意:我在其他地方读到过,您不应该弄乱 System.Net.ServicePointManager.SecurityProtocol 设置。 Asp.Net 4.6.1 默认为 TLS 1.2,但它应该向后兼容 1.1 和 1.0。我即将使用一些使用此 API 的 Xamarin 应用程序进行测试,所以我会让大家知道会发生什么。更新来了!

【讨论】:

    【解决方案2】:

    从 7 月 29 日开始,我也遇到了同样的问题。我的项目使用 .NET 4.5.2 编译并使用 LinqToTwitter 库。在拨打 Twitter 电话之前,我可以通过添加以下行来解决此问题。

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

    【讨论】:

      【解决方案3】:

      我自己也遇到了同样的问题。但是,请注意对ServicePointManager 的更改将适用于所有端点。因此,如果您连接到另一个不支持 TLS 1.2 的设备,它将停止工作。

      因此,更好的解决方案是将Tls12 值与现有值

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

      【讨论】:

        【解决方案4】:

        我来安装 dotNET 4.5 并获得修复/删除选项,表明它已经安装!这是出乎意料的。

        所以我添加了这行代码:
        System.Net.ServicePointManager.SecurityProtocol = 3072

        并将 Web.config 更改为使用 targetFramework="4.5"

        现在一切都恢复正常了。谢谢。

        【讨论】:

          猜你喜欢
          • 2019-01-14
          • 2011-11-04
          • 2023-03-31
          • 2011-01-06
          • 2013-08-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-12
          相关资源
          最近更新 更多