C# 绕过DotNet核心服务堆栈上的SSL证书验证
我知道,C# 绕过DotNet核心服务堆栈上的SSL证书验证,c#,linux,servicestack,.net-core,C#,Linux,servicestack,.net Core,我知道,ServicePointManager.ServerCertificateValidationCallback不再存在于.Net Core中,取而代之的是: using(var handler = new System.Net.Http.HttpClientHandler()) { using (var httpClient = new System.Net.Http.HttpClient(handler)) { handler.ServerCertifi
ServicePointManager.ServerCertificateValidationCallback
不再存在于.Net Core中,取而代之的是:
using(var handler = new System.Net.Http.HttpClientHandler())
{
using (var httpClient = new System.Net.Http.HttpClient(handler))
{
handler.ServerCertificateCustomValidationCallback = (request, cert, chain, errors) =>
{
return true;
};
}
}
但是,我们目前使用的是ServiceStack.Core
库,据我所知,它既不公开这样的属性,也不公开处理程序本身
在这段代码中,我如何告诉ServiceStack客户端绕过ssl验证
using(var client = new JsonServiceClient("https://www.google.com"))
{
var response = client.Get("/results");
}
如果有办法的话,这在Windows和Linux上是否都是一样的呢?
JsonServiceClient
是基于.NETHttpWebRequest
构建的,它已经在.NET Core中作为一个组件被重写,因此我们通常建议使用.NET Core来避免这种开销(比.NET 4.5慢得多)并切换到使用,因为它直接使用HttpClient
,您可以在其中为自己的HttpClientHandler
注入:
var client = new JsonHttpClient(baseUrl)
{
HttpMessageHandler = new HttpClientHandler
{
UseCookies = true,
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
ServerCertificateCustomValidationCallback = (req,cert,chain,errors) => true
}
};
请注意,建议您尽可能重复使用HttpClient实例,并避免处理它们。“绕过SSL证书验证…”听起来很糟糕。它会将您的应用程序移动到应用程序的领域。也许您应该将其改为“如何执行自定义验证…”,然后执行对您的应用程序有意义的检查。@jww“世界上最危险的代码”听起来太夸张了,尤其是在没有上下文的情况下。如果您正在编写使用自签名证书访问内部服务的工具,该怎么办?如果您有自签名证书,则可以对其进行验证。没有必要放弃或避免验证。您甚至可以跳过证书验证并跳转到公钥固定。在固定的情况下,证书只是一个表示细节,您所需要的只是主机的公钥来识别它。我想你可能问错了问题,但我不知道该怎么说。也许你应该退一步,问一些问题,比如如何在服务中使用自签名证书。