6

我想在 Windows Store XAML 应用程序中使用客户端证书身份验证。使用 makecert 我创建了一个自签名 CA 和客户端证书,身份验证在 IIS/ASP.NET + 浏览器(IE10、Chrome 等)中运行良好。现在我想在 Windows Store 应用程序中使用它,但不确定如何实际安装证书。我有一个导入到 IE10 的 cert.pfx 文件。这是我用来通过 SSL 使用 HTTP 服务的代码。

HttpClientHandler handler = new HttpClientHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Automatic;

HttpClient client = new HttpClient(handler);

不确定 ClientCertificateOption.Automatic 和 ClientCertificateOption.Manual 之间有什么区别。当我尝试连接证书时,未将证书提供给服务器并且出现 401 错误,我猜测证书不存在于应用程序证书存储中,因此没有任何内容被发送到服务器。那我该如何安装证书呢?

我应该使用 CertificateEnrollmentManager.ImportPfxDataAsync() 方法吗?如果是这样,我如何将 .pfx 转换为“Base64 编码的 PFX 消息”pfx 是否应该包含私钥?

或者我应该使用此处描述的证书扩展:http: //msdn.microsoft.com/en-us/library/windows/apps/hh464981.aspx#certificates_extension_content

4

1 回答 1

6

以下代码将加载 pfx 文件并创建可由 ImportPfxDataAsync 方法使用的 base64 编码字符串:

StorageFolder packageLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
StorageFolder certificateFolder = await packageLocation.GetFolderAsync("Certificates");
StorageFile certificate = await certificateFolder.GetFileAsync("YourCert.pfx");

IBuffer buffer = await Windows.Storage.FileIO.ReadBufferAsync(certificate);
string encodedString = Windows.Security.Cryptography.CryptographicBuffer.EncodeToBase64String(buffer);

这假设您将证书放在“证书”文件夹中。

您可能想看看http://www.piotrwalat.net/client-certificate-authentication-in-asp-net-web-api-and-windows-store-apps/这是端到端的在 windows 8 应用程序中使用客户端证书与 asp.net web api 进行通信的场景。

于 2012-10-24T22:25:28.237 回答