【问题标题】:Variety of errors appearing randomly各种错误随机出现
【发布时间】:2020-05-20 17:51:35
【问题描述】:

我决定修改这个问题,因为在经历了数小时的挫折之后,这是一项匆忙的工作。 向所有浪费时间的人道歉。

拓扑: 两种截然不同的应用。 1. WPF 应用程序 C#。包括 DevExpress 工具、SignalR、Web api 的 AutoRest 实现。 ADAL 身份验证。 2. 驻留在 Azure 上的 Webapi ASP.NET,最近升级到 .net 版本 4.6.1(发布错误)。我也通过标题使用版本控制。 3.Azure SQL Server作为后端。最近将 DTU(内存、CPU 等)从 10 升级到 20。(发布错误)

系统已经成功运行了大约三年,在此期间进行了大量的开发工作。

在几天没有发布之后,星期一早上来了,错误开始出现。 我通过 NLog 将所有错误记录到 SQL Server。

第一个错误:(到目前为止我得到的最多)

System.Net.Http.HttpRequestException: Error while copying content to a stream. ---> System.IO.IOException: The decryption operation failed, see inner exception. ---> System.ComponentModel.Win32Exception: The specified data could not be decrypted

然后我开始看到

System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
--- End of inner exception stack trace ---

这个错误不太频繁,但昨天发生了 8 次。

我也看到了这个错误,今天我开始认为这可能是罪魁祸首。我会仔细查看我的 ADAL 调用,认为它运行良好。

Microsoft.Rest.HttpOperationException: Operation returned an invalid status code 'Unauthorized'

错误随机出现,您可以绕过它们,系统继续工作。经常需要刷新数据。

我已经从我知道稳定的早期版本重建了 api,并添加了我此后创建的几个调用。 我昨天重建了 WPF 应用程序,然后得到了相同的结果。

所以我开始认为它是 Azure 上的基础架构。

我升级了 SQL Server 上的 DTU(这已达到顶峰,并且需要)。

我将 API 网络服务计划升级到新的级别。

我通过 Azure 将 api 上的最小 TLS 设置为 1.2。 api 代码没有变化,我只是不知道 TLS 是如何工作的。

我现在拥有在 azure 上运行的应用程序洞察力,以了解 Web api 的运行情况,看看我是否能发现任何东西。

今天早上我仍然看到错误。 这是漫长的一周!

【问题讨论】:

  • 你读过this question吗?
  • 感谢您。我没见过这个。正在观看。
  • 您是否在 wpf 应用程序中使用 https 并通过邮递员测试 https 调用?如果启用了http,你能检查一下http是否工作正常吗?
  • 似乎根本不是竞争条件。只是您需要一次调试一个的正常错误。如果您无法解决问题,请为每个问题创建一个单独的问题,并使用专用的minimal reproducible example
  • 无法创建 SSL/TLS 安全通道意味着您的服务器无法建立 TLS 连接。很可能是您正在与之交谈的服务器证书有问题。它可能是自签名的,可能缺少指向受信任根的完整证书链,或者它可能使用不受信任的根。

标签: c# wpf https azure-active-directory webapi


【解决方案1】:

我会根据您提到的错误尝试帮助您。我正在为同样的错误而苦苦挣扎:

发送请求时出错。 ---> System.Net.WebException:请求被中止:无法创建 SSL/TLS 安全通道。

考虑到您没有提供代码,我无法确定这是否是同一个问题,但基于错误,我建议您尝试以下方法:

在您的Global.asax 文件中,直接在Application_Start 方法中添加以下行:

ServicePointManager.SecurityProtocol = 
((IEnumerable<SecurityProtocolType>)ConfigurationManager
    .AppSettings["SecurityProtocol"]
    .Split(',')
    .Select(a => (SecurityProtocolType)Enum.Parse(typeof(SecurityProtocolType), a)))
    .Aggregate<SecurityProtocolType, SecurityProtocolType>(0, (current, item) => current | (SecurityProtocolType)item);

在你的Web.config

<add key="SecurityProtocol" value="Tls12" />

&lt;appSettings&gt; 部分。

这是另一个提到的 SecurityProtocol 错误,建议您进行非常好的讨论here

【讨论】:

  • 谢谢。我明天会检查一下。此 webapi 位于 Azure 上。我可以在 Azure 上设置 TLS 1.2。我明天去看看,回来汇报。我真的很感谢你的帮助。我知道这个问题没有很好地计划好,但我花了三天三夜的时间来处理它,结果碰了壁。当然我们都去过那里。谢谢!
  • 我现在看到的主要错误是我发布的第二个错误。解密操作失败。明天我会更详细,并更新问题
  • 别担心,我稍后会检查更新版本。希望能帮到你。
  • 关于发生了什么的任何更新信息?我的代码解决了您的问题吗?
  • 100% 相关。我会写下我所经历的作为答案,希望能帮助其他人。感谢您的帮助。
【解决方案2】:

大多数情况下,我非常粗略地调试这些问题。在运行您的应用程序的服务器上打开浏览器。转到您要访问的网址。评估 url 的锁定/不受信任部分并查看提供的证书。 98% 的时间都是需要的。对于另外 2%,Wireshark 是你的朋友。它将显示 TLS 协商的详细信息。您的服务器和远程服务器可能没有共同的密码,您可以在日志中看到这一点。您还可以使用 nmap 从远程服务器获取密码列表,并与注册表中启用的密码进行比较

【讨论】:

  • 该死,我是想再添加一条评论,但现在似乎无法删除它?
【解决方案3】:

我感觉这是一个 tls 不匹配问题。也许其中一个系统开始需要 tls 1.2 而您的应用程序没有发送它。 您对错误的来源不是很具体,是在您的 webapi 和 sql db 之间还是在 wpf 和 webapi 之间,

假设它在 wpf 和 webapi 之间, 打开一个powershell, 键入 [Net.ServicePointManager]::SecurityProtocol 然后看看你在那里看到了什么, 然后在 powershell 中运行,这将为 4.7 以下的 .net 版本设置默认值以始终强制 tls1.2 连接

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord

然后重新启动 powershell 并再次执行 [Net.ServicePointManager]::SecurityProtocol 以确保其中也显示 Tls12。

或在您的代码中手动设置它,但我会先在您的 wpf 端计算机上运行它以测试这是否是问题所在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2020-12-26
    相关资源
    最近更新 更多