我有一个类库来执行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应用程序需要做什么。谢谢。
根据同事的建议,我做了以下代码更改,并修复了它。
//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";
我将此标记为答案,尽管我不完全理解这种行为。
我已经用一个核心项目和一个外部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: 在我的主机上手动克隆回购没有问题。 任何智慧都会大加赞赏。