[英]Client certificate in HTTP (Windows 8.1)
我有.crt和.key作為HTTPClient的客戶端證書。 但是我找不到任何信息/示例如何使用它。 我有兩種用法。
首先:.crt和.key中的.pfx,然后安裝並加載以進行過濾。
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作為授權客戶端。 鏈接沒有幫助我,因為WACK的錯誤。 我已將OID添加到我的證書中並使用相同的代碼。 證書設置為內容和始終復制。
只需將證書安裝到客戶端上的Windows證書存儲中即可。
剛剛將文件重命名為pfx擴展名,終於可以使用了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.