c# - 如何使用 HttpClient 类正确建立从 UWP App 到 WebAPI 的 SSL 连接?

标签 c# asp.net-web-api ssl-certificate uwp dotnet-httpclient

我有一个与服务器 WebAPI 通信的 UWP 应用程序。为此,我使用了 Windows.Web.Http 命名空间中的 HttpClient 类。如果我使用简单的 Http URL,它确实可以正常工作。由于发送密码和其他敏感数据,我想使用 SSL。但是当我尝试使用 Https URL 时出现问题。程序仍然向我显示一条错误消息,提示“证书颁发机构无效或不正确”。我是证书等方面的新手,所以它没有告诉我任何有用的信息。 在某些网站上,我找到了一些半解决方案。使用 HttpBaseProtocolFilter 类,我可以设置选项来忽略一些服务器证书错误,如下所示:

HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
filter.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted);
HttpClient client = new HttpClient(filter);

它可以工作,但只能在桌面上使用。当我在移动模拟器上运行我的应用程序时,错误再次出现。此外,我真的不认为这是一个好的解决方案,所以我搜索了其他东西并找到了这个:https://pfelix.wordpress.com/2012/12/16/using-httpclient-with-ssltls/ .有一些关于 HttpClient 和 SSL 的信息,但据我所知,它是关于命名空间 System.Net.Http 中的 HttpClient 的。我为 Windows Store App 尝试了这个解决方案,但它也没有奏效。

var client = new HttpClient(new HttpClientHandler
    {
        ClientCertificateOptions = ClientCertificateOption.Automatic
    });

所以这是我的问题:如何设置此 HttpClient(来自 Windows.Web.Http 或 System.Net.Http)以执行与我的 WebAPI 的有效 SSL 连接?也许服务器端需要设置一些东西?

编辑:我正在使用 Visual Studio 2015 中的 IIS Express,因为我真的不知道如何将我的 WebAPI 添加到完整的 IIS 并让它工作。我还在 WebAPI 项目属性中打开了 SSL,它为我生成了一个 Https URL(所以我认为它也会生成一个正确的证书)。如果我尝试导航到 Http URL,在我的 Mozilla Firefox 和 IE 上一切正常。当我尝试我的 https://localhost:44301/ 时显示关于不受信任的证书的错误两个浏览器中的 URL。

最佳答案

您已接近 HttpClientHandler 方法,但您想信任服务器证书,而不是客户端证书(您的示例中不存在)。试试这个:

HttpClient client = new HttpClient(new HttpClientHandler { 
ServerCertificateCustomValidationCallback = (a, b, c, d) => true });

这将导致所有服务器证书都受到信任,因此不要在生产中使用它,但非常适合在开发期间从 UWP 应用程序访问本地主机上的 https 服务。

关于c# - 如何使用 HttpClient 类正确建立从 UWP App 到 WebAPI 的 SSL 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39237553/

相关文章:

c# - 无法在 web-api 2 中创建新用户

Azure - WebApp - 通过证书验证请求

c# - Xamarin - 我如何在类外使用列表

c# - DateTime ToLocalTime 失败

angularjs - 如何在 Angular View 中使用 ASP.Net MVC View .cshtml 而不是 .html

ssl-certificate - 忽略证书错误 + headless puppeteer + google cloud

ssl - 为什么我的网站上同时有 HTTPS 和 HTTP 链接,需要它们都安全!

c# - 在 C# 中递归搜索目录

c# - Sitecore Items - 以编程方式测试匿名用户是否具有权限

web-config - Autofac 在 Web.Config 上丢失注册编辑