Azure Windows应用商店应用程序是否始终不允许自签名证书(即使是明确受信任的证书)?

Azure Windows应用商店应用程序是否始终不允许自签名证书(即使是明确受信任的证书)?,azure,ssl,asp.net-web-api,windows-store-apps,self-signed,Azure,Ssl,Asp.net Web Api,Windows Store Apps,Self Signed,我看到了这两个问题——同一个问题,不同的问题 我正在尝试将我的Windows 8.1应用商店应用程序连接到ASP.NET Web API Web服务,该服务使用自签名证书通过HTTPS进行保护。这是一个概念验证应用程序,最终将出现在

我看到了这两个问题——同一个问题,不同的问题

我正在尝试将我的Windows 8.1应用商店应用程序连接到ASP.NET Web API Web服务,该服务使用自签名证书通过HTTPS进行保护。这是一个概念验证应用程序,最终将出现在<5台不同的机器上,并且只能在内部看到,因此我计划只在每个目标机器上安装受信任的证书

在我的开发设置中尝试此操作时,两个HttpClient API在调用服务时都无法建立信任关系

  • Windows.Web.Http.HttpClient异常:“证书颁发机构无效或不正确”
  • System.Net.Http.HttpClient异常:“根据验证过程,远程证书无效。”
我的自签名证书(仅公钥.cer版本)安装在客户端的“用户”和“本地计算机”受信任根证书颁发机构中。我真的很惊讶,这还不足以让温特相信它。我是否遗漏了什么,或者根本没有办法为自签名SSL证书建立信任关系,从而使HttpClient满意

有关我的设置的详细信息:

  • ASP.NET Web API
  • Azure emulator中运行的Azure web角色
  • 证书颁发者:127.0.0.1
  • 证书主题:127.0.0.1
  • 证书密钥:2048位
  • Windows 8.1应用商店
  • 用户\受信任的根证书颁发机构中安装的证书(.cer文件,仅限公钥)
  • 本地计算机\受信任的根证书颁发机构中安装的证书(.cer文件,仅限公钥)
  • 已将证书(.cer文件,仅限公钥)添加到“CA”下的Windows应用商店应用程序清单

我并不是要求解决办法来配置HttpClient以接受自签名或无效的证书—我只是想配置与此证书的信任关系。这可能吗?

您应该能够通过执行以下请求来找出证书的问题:

// using Windows.Web.Http;

private async void Foo()
{
    HttpRequestMessage request = null;
    try
    {
        request = new HttpRequestMessage(
            HttpMethod.Get,
            new Uri("https://localhost"));

        HttpClient client = new HttpClient();
        HttpResponseMessage response = await client.SendRequestAsync(request);
    }
    catch (Exception ex)
    {
        // Something like: 'Untrusted, InvalidName, RevocationFailure'
        Debug.WriteLine(String.Join(
            ", ",
            request.TransportInformation.ServerCertificateErrors));
    }
}
使用
HttpBaseProtocolFilter
可以忽略证书错误:

// using Windows.Web.Http;
// using Windows.Web.Http.Filters;
// using Windows.Security.Cryptography.Certificates;;

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

HttpResponseMessage response = await client.SendRequestAsync(request);

我遗漏的一点是,该证书不在我本地计算机上的IIS服务器证书列表中

打开IIS管理器并查看服务器证书部分,我确实发现Azure emulator已经设置了127.0.0.1 SSL证书:

  • CN=127.0.0.1
  • O=仅测试
  • OU=Windows Azure DevFabric
但是,我自己在IIS之外制作的自签名证书(CN=127.0.0.1)不在列表中。我导入了它,现在我的Windows应用商店应用程序的HttpClient连接愉快(Chrome和IE中的证书警告也消失了!)


如果有人能确定这方面的技术细节,请发表评论-这一修复感觉有点神奇,我不确定我能准确地指出这一工作的原因。可能是我对127.0.0.1的两个证书感到困惑,尽管我在Azure项目中配置的指纹始终是我打算使用的指纹?

谢谢-我对忽略上述证书错误的解决方法不感兴趣,但不知道ServerCertificateErrors属性。这只是出现了一个“不可信”的错误。这能告诉我更多吗?