我已經得到.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添加到我的證書並使用相同的代碼。證書設置爲「內容」和「始終複製」。
你能告訴我更多關於你的意思嗎?你把名字改爲.crt了嗎?如果有密碼怎麼辦? – tofutim
@tofutim帶GetFileFromApplicationUriAsync的ImportPfxDataAsync(new Uri(「ms-appx:///client-cert.notpfx」)); – CherryPerry