SSL连接无法建立。

109

我在我的ASP.NET Core应用程序中使用第三方库(Splunk c# SDK),尝试通过此SDK连接到我的本地Splunk服务,但遇到以下异常:

System.Net.Http.HttpRequestException:无法建立SSL连接,请参见内部异常。

而内部异常信息如下:

根据验证过程,远程证书无效。

该SDK在底层使用HTTP客户端,但我无法访问此对象以配置HttpClientHandler。

我在谷歌上搜索的所有结果都使用ServicePointManager来绕过SSL验证,但这种解决方法在Asp.Net core中不起作用。

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

有没有办法在 asp.Net Core 中绕过此验证?


3
你能否在你的机器上注册本地主机服务的证书,使其有效? - ProgrammingLlama
1
@John 我该如何注册?你能详细说明一下吗? - MVafa
1
你的本地服务器也是ASP.NET的吗?还是其他的? - ProgrammingLlama
1
@John 不是这样的。服务器是Splunk Enterprise,我只是下载并安装它,在本地主机上托管服务:8089。 - MVafa
1
你需要找到一种方法来导出它正在使用的SSL证书,或者使用自己的自签名证书。然后,你可以通过certmgr.msc将其添加到Windows中。 - ProgrammingLlama
1
对于Asp.Net Core中的HttpClient,您可以尝试使用ServerCertificateCustomValidationCallback,参考bypass invalid SSL certificate in .net core,但似乎无法通过HttpClientHandler传递,您可以检查一下Splunk c# SDK是否公开了此功能。 - Edward
14个回答

1

Windows 10 在“计算机配置”>“管理模板”>“网络”>“SSL 配置设置”下添加了椭圆曲线的组策略配置。ECC 曲线顺序列表指定首选的椭圆曲线顺序,同时启用未启用的支持曲线。

增加了以下椭圆曲线的支持:

 BrainpoolP256r1 (RFC 7027) in Windows 10, version 1507 and Windows Server 2016
    BrainpoolP384r1 (RFC 7027) in Windows 10, version 1507 and Windows Server 2016
    BrainpoolP512r1 (RFC 7027) in Windows 10, version 1507 and Windows Server 2016
    Curve25519 (RFC draft-ietf-tls-curve25519) in Windows 10, version 1607 and Windows Server 2016


重新启动计算机并成功

问题

路径 设置


0
如果你在使用dotnet core (.net core)的API或应用程序中工作。那么请转到程序文件或启动类,你需要在那里注册DI并注册HttpClient以及HttpClientHandler。
像下面这样:
builder.Services.AddHttpClient("").ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler

{ ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; } });


0
对于那些试图将 IHttpClient 注入到控制器中的人来说,我的解决方案是使用一个命名的客户端。
在 Program.cs 文件中配置命名客户端:
builder.Services.AddHttpClient("YourNamedClient").ConfigureHttpMessageHandlerBuilder(builder =>
{
    builder.PrimaryHandler = new HttpClientHandler
    {
        ServerCertificateCustomValidationCallback = (m, c, ch, e) => true
    };
});

在控制器内部:
 public class YourController: ControllerBase
    {
        private readonly HttpClient _httpClient;

        public YourController(IHttpClientFactory factory)
        {
            _httpClient = factory.CreateClient("YourNamedClient");
        }

    }

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接