windows-phone-8.1 – 升级到最新Windows Phone 8.1后无法发送证书

前端之家收集整理的这篇文章主要介绍了windows-phone-8.1 – 升级到最新Windows Phone 8.1后无法发送证书前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个为8.1创建的Windows Phone应用程序,其中一个任务是客户端 – 服务器证书方案。我的应用程序工作正常,我可以发送客户端证书并登录到服务器。但升级到Windows 8.10.14xxxx之后是不可能的。我拿了wirehark的踪迹,似乎证书从不发送。
消息的内容长度为0。

我使用HttpClient.SendAsync(await)和HttpBaseProtocolFilter输入证书。升级前它工作完美。

任何想法?有什么坏处吗

首先我正在安装pfx

async private void btnInstall_Click(object sender,RoutedEventArgs e)
{
    //Install the self signed client cert to the user certificate store

    string CACertificate = null;
    try
    {
        Uri uri = new Uri("ms-appx:///certificates/test.pfx");
        var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri);
        IBuffer buffer = await FileIO.ReadBufferAsync(file);
        using (DataReader dataReader = DataReader.FromBuffer(buffer))
        {
            byte[] bytes = new byte[buffer.Length];
            dataReader.ReadBytes(bytes);
            // convert to Base64 for using with ImportPfx
            CACertificate = System.Convert.ToBase64String(bytes);
        }
        await CertificateEnrollmentManager.UserCertificateEnrollmentManager.ImportPfxDataAsync(
            CACertificate,"xxxxx",ExportOption.Exportable,KeyProtectionLevel.NoConsent,InstallOptions.None,"ClientCert1");


    }
    catch (Exception ex)
    {
        //;
    }
}

然后我打电话给这个服务

string serviceURL = "https://my.web.services";
Certificate cert = null;

CertificateQuery query = new CertificateQuery();
query.FriendlyName = "ClientCert1";
IReadOnlyCollection<Certificate> certs = await CertificateStores.FindAllAsync(query);

HttpBaseProtocolFilter bpf = new HttpBaseProtocolFilter();
//if you install the CA you don't need to ignore the ServerCertificate Errors
//bpf.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted);

if (certs.Count > 0)
{
    cert = certs.ElementAt(0);
    bpf.ClientCertificate = cert;
}

HttpClient httpClient = new HttpClient(bpf);
try
{

    var response = await httpClient.GetInputStreamAsync(new Uri(serviceURL));
    //take data
}
catch (Exception ex)
{              
    //0x80072F0D 
}

在8.10.14xxxx Windows Phone中运行时,我总是采取一个例外(0x80072F0D)。我的代码在更新之前工作,现在我总是使用这个返回码。证书被加载到httpClient中。当我用调试器停止应用程序似乎证书在那里,但是0x800072F0D可能意味着证书没有发送?

在场景中有一个中间证书颁发机构。该证书包含在pfx中。我需要安装吗?

我假设您已经将客户端证书放在应用程序证书存储中。
如果不这样做:
1)下载PFX文件
2)通过以下方式将证书安装在应用程序的证书库中
await CertificateEnrollmentManager.ImportPfxDataAsync(certString,"Your_PFX_Password",friendlyName);

3)检查证书库中的证书。

CertificateQuery certQuery = new CertificateQuery();
certQuery.FriendlyName = friendlyName;
IReadOnlyList<Certificate> certs = await CertificateStores.FindAllAsync(certQuery);

证书[0]应该有你需要的证书。

4)现在,将证书附加到HTTP请求

HttpBaseProtocolFilter protolFilter = new HttpBaseProtocolFilter();
protolFilter.ClientCertificate = certs[0] //from prevIoUs step
HttpClient client = new HttpClient(protolFilter)

PS:你不应该使用System.Net.htpp.HttpClient。而不是应该使用Windows.Web.Http.HttpClient。

原文链接:https://www.f2er.com/windows/373015.html

猜你在找的Windows相关文章