2012-10-24 38 views
6

我想在Windows應用商店中的應用程序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

回答

6

將下面的代碼加載一個PFX文件,並創建一個base64編碼的字符串,可以通過ImportPfxDataAsync方法一起使用:

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的網絡API進行通信的終端到終端的場景。