我已经得到.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