当前位置: 首页 > 知识库问答 >
问题:

DotNet Core HttpClient安全错误

程正阳
2023-03-14

我有一个类库来执行4.6.1框架中html" target="_blank">构建的Rest API调用。我用过System.网。Http V4 HttpClient用于管理呼叫。此库适用于普通的dotnet应用程序。最近我尝试了一个DotNet Core应用程序,它失败了与安全错误。后来我修改了库后建议。它有一些进展,但应用程序失败与错误如下所示

错误消息:发送请求时出错。Innerexception消息:发生安全错误。StackTrace:at系统。运行时。例外服务。例外DispatchInfo。向系统抛出()。穿线。任务。等待的约会'1。系统中的GetResult()。网Http。WinHttpHandler。迪乌105。MoveNext()

图书馆代码:

private readonly HttpClient _client = null;
private ICredentials somecred;

    public Program()
    {
        HttpClientHandler clientHandler = new HttpClientHandler { Credentials = somecred, UseDefaultCredentials = false };
        _client=new HttpClient(new MessageHandler(clientHandler, TimeSpan.FromSeconds(1), 1), false);
        _client.Timeout = TimeSpan.FromSeconds(90);
        _client.BaseAddress = new Uri("https://somedomain.com/");

        ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
        ServicePointManager.DefaultConnectionLimit = 10;
        ServicePointManager.Expect100Continue = true;
    }

    public async Task<IOperationResponse> GetData()
    {
        ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

        using (HttpResponseMessage httpResponse =
                await _client.SendAsync(new HttpRequestMessage(HttpMethod.Head, "api/getdata"), HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false)
                )
        {
            if (httpResponse != null) { ... }
        }
    }

    internal class MessageHandler : DelegatingHandler
    {
        public MessageHandler(HttpMessageHandler innerHandler, TimeSpan retryInterval, int retryCount) : base(innerHandler)
        {

        }

        protected override async Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request,
        CancellationToken cancellationToken)
        {
            HttpResponseMessage response = null;

            //!! security error in below line
            response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
        }
    }

请让我知道,这个库运行DotNet Core应用程序需要做什么。谢谢。

共有2个答案

隆芷阳
2023-03-14

根据同事的建议,我做了以下代码更改,并修复了它。

//original code
_client.BaseAddress = new Uri("https://xyz.abc.somedomain.com/");

//fix code
_client.BaseAddress = new Uri("https://abc.somedomain.com/");
_client.DefaultRequestHeaders.Host = "xyz.abc.somedomain.com";

我将此标记为答案,尽管我不完全理解这种行为。

方和宜
2023-03-14

我已经用一个核心项目和一个外部4.5库在本地测试了你的代码,我能触发安全错误的唯一方法是如果目标站点没有正确的安全级别(即没有正确设置SSL)。当目标站点的SSL配置正确时,调用通过。

确保您的目标具有SSL设置或针对另一个已知的工作SSL站点进行测试,以查看您是否仍然遇到此问题。

 类似资料:
  • 安全性错误配置在安全性设置被定义,实现和维护为默认设置时出现。良好的安全性要求为应用程序,Web服务器,数据库服务器和平台定义和部署安全配置。使软件保持最新同样重要。 威胁代理 - 匿名外部攻击者以及拥有自己帐户的用户可能会试图破坏系统。 攻击者的方法 - 访问默认帐户,未使用的页面,未修补的漏洞,未受保护的文件和目录以获得未经授权的访问。 安全弱点 - 可以发生在任何级别 - 平台,Web服务器

  • 问题内容: 我正在尝试按照网络上的指南使用Spring安全性来保护我的网站。所以在我的服务器端,WebSecurityConfigurerAdapter和控制器看起来像这样 让我非常困惑的是,服务器不响应POST / DELETE方法,而GET方法可以正常工作。顺便说一句,我在客户端上使用RestTemplate。例外情况是: 我已经在互联网上搜索了几天。还是没有头绪。请帮忙。非常感谢 问题答案:

  • 问题内容: 我正在尝试创建一个安全的node.js服务器,以与使用ssl(https)的网站一起使用。 但是,当我启动服务器时,出现以下错误: 我的服务器在没有线路的情况下运行良好。我正在运行node.js(V0.4.1)。 我将不胜感激任何建议。 谢谢。 问题答案: 在Node.JS 0.4中重新执行了HTTPS实现。请参阅nodejs.org上的相应文档。 来自文档的示例:

  • 我正在将程序从JApplet迁移到Java Web Start,我遇到了安全问题。我的程序是用我公司的证书签署的,我还将我的网站添加到Java控制面板的例外列表中,但它仍然给我这个错误: 我的Java例外网站列表: 我的JNLP文件如下所示: 我使用java 1.8。0_73。Jar文件由正确签名。你知道如何在没有这个错误的情况下用网络启动应用程序吗?HTTP服务器在我的本地电脑上。当我用JNLP

  • 我是symfony的新手,正在学习登录表单教程(https://symfony.com/doc/2.8/cookbook/security/form_login_setup.html)但我得到了以下错误: 我使用相同的SecurityController: security.yml 安全:

  • 用一个简单的byo runbook设置来尝试openshift origin V3,该设置严格遵循高级安装说明。然而,我的构建很难从任何git库克隆,甚至是公共的github库。 HTTPS: SSH: 在我的主机上手动克隆回购没有问题。 任何智慧都会大加赞赏。