2014-04-06 62 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證書存儲區中即可。