我在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; };
有什么方法可以绕过asp.Net核心中的此验证吗?
9条答案
按热度按时间kzmpq1sx1#
是的,你可以使用下面的代码绕过证书...
pgx2nnw82#
当我在我的开发机器上使用身份服务器(.net core)和web API(.net core)时,我意识到我需要信任localhost的ssl认证。这个命令为我做了这项工作:
sg2wtvxw3#
如果您正在添加IHttpClient并通过DI注入,则可以在Startup.cs类上添加配置。
然后从依赖注入类调用它。
ig9co6j14#
这个博客帮助了我
https://www.khalidabuhakmeh.com/validate-ssl-certificate-with-servicepointmanager
j0pj023g5#
这对我很有效
通过提供自定义的HttpClientHandler创建Splunk.Client.Context,绕过SSL无效证书错误。
7lrncoxx6#
安装.NET Core SDK会将ASP.NET Core HTTPS开发证书安装到本地用户证书存储区。证书已安装,但不受信任。要信任证书,请执行一次性步骤以运行dotnet dev-certs工具:
欲了解更多信息,请访问此链接
f87krz0w7#
您会遇到此错误,因为您的应用无法验证连接的证书,并且在创建会话/登录令牌的API中使用此错误尤其常见。您可以如上所示以一种危险的方式绕过它,但显然这不是一个好的解决方案,除非您只是在测试。
最好和最简单的解决方案是使用“modernhttpclient-updated" Nuget package,”,它的代码在this GitHub repo中共享,其中也有很多文档。
添加Nuget包后,将NativeMessageHandler传入HttpClient(),如图所示并构建:
var httpClient = new HttpClient(new NativeMessageHandler());
现在,您将注意到,您已经删除了该错误,并将得到一个不同的错误消息,如
Certificate pinning failure: chain error. ---> Javax.Net.Ssl.SSLPeerUnverifiedException: Hostname abcdef.ghij.kl.mn not verified: certificate: sha256/9+L...C4Dw=
要摆脱这个新的错误消息,您必须将错误中的主机名和证书密钥添加到Pin中,并将其添加到NativeMessageHandler的TLSConfig中,如图所示:
请记住,您的其他(非令牌生成)API调用可能不实现证书固定,因此它们可能不需要此功能,并且通常它们可能使用不同的主机名。在这种情况下,您也需要将它们注册为pin,或者只是为它们使用不同的HttpClient!
kse8i1jr8#
我不得不关闭我的vpn摆脱了这个错误
u91tlkcl9#
这很可能是由于代理配置不正确造成的。
不幸的是,一些较新的Windows工作站的这种设置是错误的。
通过在Windows命令提示符下运行以下脚本来检查系统环境变量。
最终,如果您的代理值已配置,但没有任何NO_PROXY设置,则在尝试访问内部服务时将遇到问题。
最后,我建议取消设置HTTP_PROXY和HTTPS_PROXY变量,除非您知道它们的作用以及需要它们的目的。
同样重要的是,检查no_proxy的值,并将其与您的同事进行比较,看看是否有任何差异,有时一个点“.”可以产生差异。