我见过两本和本 -同样的问题,不同的问题。
我想我的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接受一般的自签名或无效的证书 - 我只是希望配置与这一个信任关系。 这可能吗?
你应该能够找出哪些是做这样的恳求证书的问题:
// 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模拟器建立一个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?