2012-10-24 13 views
6

Vorrei utilizzare l'autenticazione del certificato client nell'app XAML di Windows Store. Utilizzando makecert ho creato una CA autofirmata e certificati client, l'autenticazione funziona in IIS/ASP.NET + browser (IE10, Chrome, ecc.). Ora volevo usarlo nell'app di Windows Store, ma non sono sicuro su come installare effettivamente il certificato. Ho un file cert.pfx che ho importato in IE10. Ecco il codice che uso per utilizzare il servizio HTTP su SSL.Installazione dei certificati client nelle app XAML di Windows Store

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

HttpClient client = new HttpClient(handler); 

Non sono sicuro che cosa è la differenza tra ClientCertificateOption.Automatic e ClientCertificateOption.Manual. Quando provo a connettere il certificato non viene presentato al server e ottengo l'errore 401 Sto indovinando che il certificato non è presente nel negozio di app e quindi nulla viene inviato al server. Come installo il certificato allora?

Devo utilizzare il metodo CertificateEnrollmentManager.ImportPfxDataAsync()? in tal caso, come posso convertire .pfx in 'PFX con codifica Base64' Se pfx contiene una chiave privata?

O forse dovrei usare l'estensione certificati come descritto qui: http://msdn.microsoft.com/en-us/library/windows/apps/hh464981.aspx#certificates_extension_content

risposta

6

Il seguente codice caricherà un file pfx e creare una stringa codificata base64 che può essere utilizzato con il metodo di 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); 

Questo presume che tu abbia messo il tuo certificato nella cartella 'Certificati'.

Si consiglia di dare un'occhiata a http://www.piotrwalat.net/client-certificate-authentication-in-asp-net-web-api-and-windows-store-apps/ questo cammina attraverso lo scenario end-to-end di utilizzare i certificati client nell'app di Windows 8 per comunicare con asp.net Web API.