簡體   English   中英

HTTP中的客戶端證書(Windows 8.1)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM