gpt4 book ai didi

ssl - 无法在 WebApp 和 WebApi (Asp Core 3.1) 之间建立 SSL 连接

转载 作者:行者123 更新时间:2023-12-04 22:39:28 24 4
gpt4 key购买 nike

我编写了一个 ASP.NET Core 3.1 MVC Web 应用程序。它是一个调用 Web API 后端的前端。

该应用程序在开发和登台上完美运行。

我无法让它在生产环境中运行:Web API 似乎还可以,我可以从浏览器或 Postman 中调用它。

但我无法从我的网络应用程序访问它。这是尝试调用电话时日志中的错误:

info: System.Net.Http.HttpClient.IApiClient.ClientHandler[100]
Sending HTTP request GET https://webapi.****.it/inetApi/api/links

fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]

An unhandled exception has occurred while executing the request.

System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.

System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host..

System.Net.Sockets.SocketException (10054): An existing connection was forcibly closed by the remote host.

--- End of inner exception stack trace ---



Staging 和 Production 都是带有 IIS10 Web 服务器的 Windows server 2019 机器。

Staging 有一个网站,其中 Web API 和 Web 应用程序都作为应用程序运行:
Web-t.****.it/inetApi
Web-t.****.it/inetW

生产 VM 有两个网站,一个用于内部 Web 应用程序,另一个用于 API:
webapi.****.it/inetApi
intranet.****.it/inetW

我们从头开始制作这个虚拟机,它是新的,上面没有任何其他应用程序或网站。

我已经尝试将 Web API 应用程序移动到 Web 应用程序的同一个网站,以查看这是否可能是问题所在,但事实并非如此。

我试图在我的 startup.cs 中强制网络应用使用 TLS 作为安全协议(protocol):
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

但它只会改变错误:

info: System.Net.Http.HttpClient.IApiClient.ClientHandler[100]
Sending HTTP request GET https://webapi.****.it/inetApi/api/links

fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]

An unhandled exception has occurred while executing the request.

System.Net.Http.HttpRequestException: An error occurred while sending the request.

System.Net.Http.WinHttpException (80072EFF, 12030): Error 12030 calling WINHTTP_CALLBACK_STATUS_REQUEST_ERROR, 'The connection with the server was terminated abnormally'.

at System.Threading.Tasks.RendezvousAwaitable`1.GetResult()
at System.Net.Http.WinHttpHandler.StartRequestAsync(WinHttpRequestState state)
--- End of inner exception stack trace ---



因此,我尝试在暂存或开发时从 Web 应用程序调用生产 Web API,并且它可以工作。

然后我尝试在生产环境中使用带有暂存 Web API 的 Web 应用程序......它也可以工作!

这让我发疯了。

就像生产中的所有东西都在单独工作,而不是一起工作。

我有授权在虚拟机上做我需要的一切......但我是一名开发人员(并且不擅长处理系统),我无法向系统管理员寻求太多帮助,因为他们在这段时间不知所措。

有任何想法吗?

最佳答案

根据Transport security Best practice,在建立SSL连接的过程中尽量不要指定SSL版本。让操作系统决定 SSL 协议(protocol)版本。
https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls
安装在服务器端的 SSL 证书的验证过程可能有问题。如您所知,SSL 通信需要客户端和服务器端之间的信任关系,因此我想知道您如何为您的 WebAPI 项目指定证书。客户端和服务器端建立信任关系了吗?即在客户端安装服务证书。至于解释它如何在开发和暂存环境中正常工作,Http Get请求不代表什么,请尝试 Http Post要求。
另外,SSL协议(protocol)需要DotNet框架/OS支持,尽量安装高版本的DotNet框架。
如果你之后有新的东西,请随时告诉我。

关于ssl - 无法在 WebApp 和 WebApi (Asp Core 3.1) 之间建立 SSL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62030992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com