2014-04-06 61 views
1

我已经得到.crt和.key用于HTTPClient的客户端证书。但我没有找到任何信息/例子如何使用它。我有两种使用方式。HTTP(Windows 8.1)中的客户端证书

首先:.pcx来自.crt和.key,然后安装并加载以进行过滤。

public static async Task Init() 
{ 
    HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter(); 
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///client-cert.pfx")); 
    await CertificateEnrollmentManager.ImportPfxDataAsync(
    CryptographicBuffer.EncodeToBase64String(await FileIO.ReadBufferAsync(file)), "", ExportOption.NotExportable, KeyProtectionLevel.NoConsent, InstallOptions.None, "name"); 
    IReadOnlyList<Certificate> certs = await CertificateStores.FindAllAsync(new CertificateQuery() { FriendlyName = "name" }); 
    filter.ClientCertificate = certs.FirstOrDefault(); 
    Client = new HttpClient(filter); 
} 

它的工作原理,但未能WACK,因为

包着含有.PFX或.SNK文件,将其删除,然后再试一次。

第二:从文件加载证书类。 HTTPFilter抛出异常,因为.crt不包含私钥。也不是构造函数,也不是Certificate类的方法,它包含从.key文件或其他东西中设置私钥的任何方法。

public static async Task Init() 
{ 
    HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter(); 
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Certificates/client.crt")); 
    Certificate cert = new Certificate(await FileIO.ReadBufferAsync(file)); 
    filter.ClientCertificate = certs.FirstOrDefault(); 
    Client = new HttpClient(filter); 
} 

那么,如何在服务器上使用.crt和.key作为授权客户端。 Link没有帮助我,因为WACK的错误。我已将OID添加到我的证书并使用相同的代码。证书设置为“内容”和“始终复制”。

回答

0

刚更名为pfx文件的扩展名,最后运行。

+0

你能告诉我更多关于你的意思吗?你把名字改为.crt了吗?如果有密码怎么办? – tofutim

+0

@tofutim带GetFileFromApplicationUriAsync的ImportPfxDataAsync(new Uri(“ms-appx:///client-cert.notpfx”)); – CherryPerry

0

只需将证书安装到客户端上的Windows证书存储区中即可。