2012-10-24 4 views
6

Ich möchte die Clientzertifikatauthentifizierung in der Windows Store XAML-App verwenden. Mit makecert habe ich selbstsignierte CA- und Client-Zertifikate erstellt, die Authentifizierung funktioniert in IIS/ASP.NET + Browser (IE10, Chrome, etc.) einwandfrei. Jetzt wollte ich es in der Windows Store App verwenden, bin mir aber nicht sicher, wie ich das Zertifikat tatsächlich installieren soll. Ich habe eine cert.pfx Datei, die ich in IE10 importiert habe. Hier ist der Code, den ich verwende, um den HTTP-Dienst über SSL zu nutzen.Installieren von Clientzertifikaten in Windows Store XAML-Apps

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

HttpClient client = new HttpClient(handler); 

nicht sicher, was der Unterschied zwischen ClientCertificateOption.Automatic und ClientCertificateOption.Manual. Wenn ich versuche, das Zertifikat nicht auf dem Server angezeigt wird und ich 401 Fehler bekomme ich vermute, dass das Zertifikat nicht in App-Zertifikatsspeicher vorhanden ist und somit nichts an den Server gesendet wird. Wie installiere ich das Zertifikat dann?

Sollte ich CertificateEnrollmentManager.ImportPfxDataAsync() Methode verwenden? wenn ja, wie kann ich .pfx in 'Base64-codierte PFX-Nachricht' umwandeln Sollte pfx privaten Schlüssel enthalten?

Oder vielleicht sollte ich Zertifikate Erweiterung verwenden, wie hier beschrieben: http://msdn.microsoft.com/en-us/library/windows/apps/hh464981.aspx#certificates_extension_content

Antwort

6

Der folgende Code wird eine pfx-Datei laden und eine Base64-codierte Zeichenfolge erstellen, die von ImportPfxDataAsync Verfahren verwendet werden können:

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); 

Diese geht davon aus, dass Sie Ihr Zertifikat in den Ordner "Zertifikate" legen.

Sie möchten vielleicht einen Blick auf http://www.piotrwalat.net/client-certificate-authentication-in-asp-net-web-api-and-windows-store-apps/ Dies geht durch End-to-End-Szenario der Verwendung von Client-Zertifikaten in Windows 8 App mit asp.net Web API zu kommunizieren.