我想在Windows应用商店XAML应用中使用客户端证书身份验证。使用makecert我创建了一个自签名的CA和客户端证书,该身份验证适用于IIS / ASP.NET +浏览器(IE10,Chrome等)。 现在我想在Windows应用商店应用中使用它,但我不确定如何实际安装证书。我有一个我导入到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-encoded PFX message' pfx应该包含私钥吗?
或者我可以使用此处所述的证书扩展名:http://msdn.microsoft.com/en-us/library/windows/apps/hh464981.aspx#certificates_extension_content
答案 0 :(得分: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进行通信的端到端方案。