在对远程Web服务的Web服务请求期间,我收到以下错误:
无法为SSL/TLS安全通道建立信任关系.---> System.Security.Authentication.AuthenticationException:根据验证程序,远程证书无效.
反正有没有忽略这个错误,并继续?
似乎远程证书没有签名.
我连接的网站是www.czebox.cz- 所以随时访问该网站,并注意甚至浏览器抛出安全例外.
我很难让我的Windows 8应用程序通过SSL与我的测试Web API进行通信.
似乎HttpClient/HttpClientHandler没有提供和选项来忽略WebRequest之类的不受信任的证书使你(尽管以"hacky"方式ServerCertificateValidationCallback).
任何帮助将非常感激!
我正在编写一个.NET Core应用程序来轮询远程服务器并在显示时传输数据.这在PHP中非常有效,因为PHP忽略了证书(这在浏览器中也是一个问题)但是我们想将它移到C#.NET CORE,因为这是系统中唯一剩下的PHP.
我们知道服务器很好,但由于各种原因,证书不会/不会很快更新.
请求使用HttpClient:
HttpClient httpClient = new HttpClient();
try
{
string url = "https://URLGoesHere.php";
MyData md = new MyData(); // this is some data we need to pass as a json
string postBody = JsonConvert.SerializeObject(md);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage wcfResponse = await httpClient.PostAsync(url, new StringContent(postBody, Encoding.UTF8, "application/json"));
Console.WriteLine(wcfResponse.Content);
}
catch (HttpRequestException hre)
{
// This exception is being triggered
}
Run Code Online (Sandbox Code Playgroud)
研究过这个似乎普遍的建议是使用ServicePointManager,但这在.NET Core中不可用,而且我无法找到推荐的替代品.
有没有一种简单或更好的方法在.NET Core中执行此操作?
我正在尝试将现有的类库代码转换为.NET Core类库.在static构造函数中的代码中,我有以下内容:
ServicePointManager.DefaultConnectionLimit = 100;
ServicePointManager.Expect100Continue = false;
Run Code Online (Sandbox Code Playgroud)
我做了一些搜索,ServicePointManager在.NET Core中不再可用,WinHttpHandler现在应该使用(.net core中的ServicePointManager.DefaultConnectionLimit?).
我的问题是究竟是什么ServicePointManager以及正在设置的属性是什么?
的WinHttpHandler不static作为ServicePointManager,所以我不得不创建一个实例来设置这些属性?我是否需要更改所有的http调用才能使用该实例?
我在ASP.NET核心应用程序中使用了第三方库(Splunk c#SDK)。我正在尝试通过此SDK连接到我的localhost Splunk服务,但出现异常消息:
System.Net.Http.HttpRequestException:无法建立SSL连接,请参阅内部异常。
内部异常说:
根据验证过程,远程证书无效。
该SDK在后台使用HTTP客户端,但是我无权访问此对象来配置HttpClientHandler。
我在Google上进行的所有搜索最终都使用ServicePointManager绕过了SSL验证,但是该解决方案在Asp.Net核心中不起作用。
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
Run Code Online (Sandbox Code Playgroud)
有什么方法可以绕过ASP.NET Core中的验证吗?
我正在制作一个应用程序,它涉及本地主机上的网站,作为带有 Asp.net Core 和 SignalR Core 的用户界面。
我的问题是在启动连接时出现身份验证异常。我知道这是因为我没有跑dotnet dev-certs https --trust。但我不能指望普通用户运行此命令或安装 dotnet SDK。
我试过使用
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
Run Code Online (Sandbox Code Playgroud)
在我的 Startup.cs(和其他地方,但我知道这是一个全局设置。无论如何它是在 HubConnection 之前执行的)无济于事。我也尝试设置一个新的 HttpMessageHandlerFactory,但文档告诉我这不会影响 Websockets。
我不相信这是一个解决方案,因为我不能使用不同的 HttpClient(除非我弄错了)
如您所见,我根本没有连接到 https:
connection = new HubConnectionBuilder().WithUrl("http://localhost:5000/MiniLyokoHub" ).Build();
Run Code Online (Sandbox Code Playgroud)
所以我不明白为什么它甚至试图获得证书。
这是完整的错误:https : //pastebin.com/1ELbeWtc
我怎样才能解决这个问题?我不需要证书,因为用户将连接到他们自己的本地主机。还是我不应该使用 websockets?
我在从我的 asp.net core 2.2 项目连接到像那里这样的 https 站点时遇到问题。我使用 IHttpClientFactory 在 Startup.cs 中创建类型化的 HttpClient
services.AddHttpClient<ICustomService, MyCustomService>();
Run Code Online (Sandbox Code Playgroud)
我不明白,如何在不像这样手动创建 HttpClient 的情况下忽略 SSL 连接问题
using (var customHandler = new HttpClientHandler())
{
customHandler.ServerCertificateCustomValidationCallback = (m, c, ch, e) => { return true; };
using (var customClient = new HttpClient(customHandler)
{
// my code
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试调用部署在 Linux 服务器上的 Web 服务,该服务器具有来自在 .net core 中开发并部署在 IIS 服务器(Windows server 2012)上的应用程序的自签名证书。
\n\n但是当我尝试调用端点时,会引发下一个错误:
\n\n\n"Message": "无法建立 SSL 连接,请参阅内部\n 异常。",\n "Description": "InnerError : System.Security.Authentication.AuthenticationException: 身份验证\n 失败,请参阅内部异常。 --- >\n System.ComponentModel.Win32Exception: Mensaje recibido inesperado, o\n bien su 格式不正确\r\n --- 内部异常堆栈\n 跟踪结束 ---\r\n at\n System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken\n 消息,AsyncProtocolRequest asyncRequest,ExceptionDispatchInfo\n 异常)\\r\\n at\n System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken\n 消息,AsyncProtocolRequest asyncRequest) \\r\\n 位于\n System.Net.Security.SslState.StartSendBlob(Byte[] 传入,Int32\n 计数,AsyncProtocolRequest asyncRequest)\\r\\n 位于\n System.Net.Security.SslState.ProcessReceivedBlob (Byte[] 缓冲区,Int32\n 计数,AsyncProtocolRequest asyncRequest)\\r\\n at\n System.Net.Security.SslState.StartReadFrame(Byte[] 缓冲区,Int32\n readBytes,AsyncProtocolRequest asyncRequest)\\r\ \n at\n System.Net.Security.SslState.PartialFrameCallback(AsyncProtocolRequest\n asyncRequest)\\r\\n--- 抛出异常的上一个位置的堆栈跟踪结尾 ---\\r\\ n at\n System.Net.Security.SslState.ThrowIfExceptional()\\r\\n at\n System.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncResult\n lazyResult)\\r\\n at\n …
在 Startup.cs 中我注入一个IHttpClientFactory服务:
services.AddHttpClient();
Run Code Online (Sandbox Code Playgroud)
然后我可以创建一个新的HttpClient通过
public MyClass(IHttpClientFactory httpClientFactory, IOptions<MyClassOptions> options)
{
_httpClient = httpClientFactory.CreateClient();
// ...
}
Run Code Online (Sandbox Code Playgroud)
MyClass进行一些 API 访问;基本 URL 在对象中传递options。
为了进行测试,我设置了 API 的虚拟实例,它使用自签名 SSL 证书。不幸的是,该证书被(正确地)识别为无效:
System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
Run Code Online (Sandbox Code Playgroud)
如何在工厂层(即直接在ConfigureServices方法中)禁用证书验证?
我发现了这个问题,但它似乎使用了一些自定义HttpClient实现(?),而我想针对默认实现。以下不起作用(DI 选择了错误的构造函数并随后失败):
services.AddHttpClient<IMyClass, MyClass>();
Run Code Online (Sandbox Code Playgroud)
这个答案建议为配置提供一个名称HttpClient,但它传递了一些魔术字符串,我想避免这种情况(MyClass位于设计为也可供其他人使用的类库中)。不传递名称也不起作用,因为AddHttpClient那样只会返回一个IServiceCollection对象。
c# ×8
asp.net-core ×5
.net ×4
.net-core ×3
ssl ×3
httpclient ×2
ignore ×1
splunk-sdk ×1
windows-8 ×1