将在Windows应用商店应用始终不允许即使明确地信任的自签名证书?(Will a Windows

2019-10-21 00:40发布

我见过两本和本 -同样的问题,不同的问题。

我想我的Windows 8.1商店应用连接到一个ASP.NET Web API网络服务,使用自签名证书固定在HTTPS。 这证明了概念的应用程序,最终会在<5台不同的机器,仅在内部看到的,所以我打算只安装证书上的每个目标机器为可信。

当我尝试这对我的开发设置,无论是HttpClient的API的调用失败的服务时建立的信任关系。

  • Windows.Web.Http.HttpClient例外:“证书颁发机构是无效或不正确”
  • System.Net.Http.HttpClient异常:“的远程证书根据验证过程是无效的。”

我的自签名证书(公开密钥的唯一的.CER版本)同时安装在“用户”和“本地计算机”在客户端上受信任的根证书颁发机构。 我真的很惊讶,这是不够的,得到的WinRT信任它。 是否有什么我失踪,或有只是没有办法建立了一个自签名的SSL证书,这将使HttpClient的快乐的信任关系?

在我的设置详细信息:

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

我没有要求的解决方法,配置的HttpClient接受一般的自签名或无效的证书 - 我只是希望配置与这一个信任关系。 这可能吗?

Answer 1:

你应该能够找出哪些是做这样的恳求证书的问题:

// 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);


Answer 2:

我错过了原来这件作品是该证书是不是在IIS服务器证书的我的本地机器上的名单!

打开IIS管理器,然后检查了服务器证书一节,我发现已经在Azure模拟器建立一个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项目已经配置了总是一个我一直在打算使用?



文章来源: Will a Windows Store app always disallow a self-signed certificate even if explicitly trusted?