如何使用HttpClient类正确建立从UWP应用到WebAPI的SSL连接

本文关键字:应用 WebAPI 连接 SSL UWP HttpClient 何使用 建立 | 更新日期: 2023-09-27 18:04:43

我有一个与服务器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商店应用程序,但它也没有工作。

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

所以这里是我的问题:我怎么能设置这个HttpClient(从Windows.Web.Http或System.Net.Http)执行工作SSL连接与我的WebAPI?也许服务器端需要设置一些东西?

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

如何使用HttpClient类正确建立从UWP应用到WebAPI的SSL连接

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

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

这将导致所有的服务器证书被信任,所以不要在生产中使用它,但在开发期间从UWP应用程序访问本地主机上的https服务时效果很好。