servicestack,.net-core,C#,Linux,servicestack,.net Core" /> servicestack,.net-core,C#,Linux,servicestack,.net Core" />

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
是基于.NET
HttpWebRequest
构建的,它已经在.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“世界上最危险的代码”听起来太夸张了,尤其是在没有上下文的情况下。如果您正在编写使用自签名证书访问内部服务的工具,该怎么办?如果您有自签名证书,则可以对其进行验证。没有必要放弃或避免验证。您甚至可以跳过证书验证并跳转到公钥固定。在固定的情况下,证书只是一个表示细节,您所需要的只是主机的公钥来识别它。我想你可能问错了问题,但我不知道该怎么说。也许你应该退一步,问一些问题,比如如何在服务中使用自签名证书。