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

C# 如何使用HttpClient类正确地建立从UWP应用到WebAPI的SSL连接?,c#,asp.net-web-api,ssl-certificate,uwp,dotnet-httpclient,C#,Asp.net Web Api,Ssl Certificate,Uwp,Dotnet Httpclient,我有一个与服务器WebAPI通信的UWP应用程序。为此,我使用Windows.Web.Http命名空间中的HttpClient类。如果我使用简单的Http URL,它确实工作得很好。由于发送密码和其他敏感数据,我想使用SSL。但是当我尝试使用Https URL时,问题出现了。程序仍然向我显示一个错误,该错误表示“证书颁发机构无效或不正确”。我在证书等方面是新手,所以它没有告诉我任何有用的东西。 在一些网站上,我找到了一些半解决方案。使用HttpBaseProtocolFilter类,我可以设置忽

我有一个与服务器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);
它可以工作,但只在桌面上。当我在Mobile Emulator上运行应用程序时,错误再次出现。此外,我真的不认为这是一个好的解决方案,所以我搜索了其他东西,只是找到了这个:。有一些关于HttpClient和SSL的信息,但据我所知,是关于命名空间System.Net.Http中的HttpClient的。我在Windows应用商店应用程序中尝试了此解决方案,但效果不佳

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上一切都正常。当我在两种浏览器中尝试我的URL时,会显示关于不受信任证书的错误。

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

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

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

使用无效SSL证书并不会真正增加连接的安全性。。。从可信机构获取与您正在使用的主机名匹配的有效SSL证书将是更好的方法(也不是免费的)。因此,在我在本地主机上使用WebAPI之前(很抱歉,我没有提到),SSL连接将无法正常工作?您真的应该从拥有有效的SSL证书开始。。。如果你需要一个本地主机-这个搜索应该给你链接到走槽。您还应该回答您的问题,以清楚地指定哪些有效,哪些无效(即,如果使用常规浏览器导航到该WebAPI https位置时未显示任何错误/哪些错误),我已将我的问题编辑在我撰写的关于它现在如何工作的地方。我也从你的链接中阅读了很多网站,并尝试了不同的解决方案。似乎很有希望。它让我摆脱了IE的错误,但它仍然出现在Mozilla Firefox中,当然也出现在使用HttpClient时。