Windows Store-App für Bankgeschäfte: Exemplarische Vorgehensweise für den Code (Windows Store-Apps mit JavaScript und HTML)

In diesem Beispiel wird gezeigt, wie Sie eine einfache Windows Store-App für Onlinebanking erstellen, die sichere Authentifizierung und Kommunikation über das Internet implementiert. Sie können den Code aus diesem Beispiel für jede Windows Store-App verwenden, bei der sichere Interaktionen mit einem Server erforderlich sind.

In den folgenden Abschnitten werden die Teile der Windows Store-App für Onlinebanking beschrieben, die eine sichere Authentifizierung ermöglichen.

Voraussetzungen

Microsoft Visual Studio Express 2012 für Windows 8

Microsoft Visual Studio Professional 2012

Microsoft Visual Studio Ultimate 2012

Entwicklerlizenz

Hinweis  Zum Ausführen der Onlinebanking-App benötigen Sie einen Webdienst, der Endpunkte für die Kommunikation mit dem Server bereitstellt. In den folgenden Artikeln werden System.Web.Mvc-Controllerimplementierungen für Authentifizierung, Zertifikatregistrierung und Zertifikaterneuerung vorgestellt.

Downloadpfade

Hier können Sie das vollständige Codebeispiel herunterladen: Windows Store-App für Onlinebanking mit sicherer Authentifizierung.

Ausführen der App

Die Windows Store-App für Onlinebanking wird anhand vorhandener Web-Apps für Onlinebanking entwickelt, die zertifikatbasierte Authentifizierung ermöglichen. Sie führen die App zum ersten Mal aus und melden sich mit einer Kombination aus Benutzername und Kennwort an, die Ihnen eingeschränkten Zugriff auf Ihr Konto gewährt. Danach schließen Sie die App, und beim erneuten Starten wählen Sie die Option zum Aktualisieren auf zertifikatbasierte Authentifizierung aus. Zum Schluss schließen Sie die App und starten Sie erneut. Wenn Sie jetzt auf Sign in to your account klicken, haben Sie Vollzugriff auf Ihr Konto, ohne Anmeldeinformationen eingeben zu müssen.

Kennwortbasierte Authentifizierung

Führen Sie zunächst die folgenden Schritte aus.

  • Starten Sie die Onlinebanking-App.

  • Klicken Sie auf Sign in to your account.

  • Melden Sie sich mit einem Benutzernamen und dem zugehörigen Kennwort an und klicken Sie auf Submit. Bei diesen angaben kann es sich um beliebige nicht leere Zeichenfolgen handeln.

    Laut der Seite "Accounts" haben Sie aufgrund der kennwortbasierten Authentifizierung beschränkten Zugriff.

Aktualisieren auf zertifikatbasierte Authentifizierung

Sie erhalten Vollzugriff auf Ihr Konto, wenn Sie von der Authentifizierung mit Anmeldeinformationen (Benutzername/Kennwort) auf zertifikatbasierte Authentifizierung aktualisieren.

  • Schließen Sie die App, und starten Sie sie erneut.

  • Klicken Sie auf Upgrade to stronger authentication.

  • Die App fragt Sie, ob Sie aktualisieren möchten, und erläutert die Vorteile der Aktualisierung.

  • Aktivieren Sie Server-generated key (PFX install), und klicken Sie auf Yes.

    Die App registriert sich für ein Zertifikat und authentifiziert den Benutzer.

Zugriff auf das Konto mit zertifikatbasierter Authentifizierung

Schließen Sie die App. Wenn Sie sie erneut starten, müssen Sie sich nicht mit Ihrem Benutzernamen und Kennwort anmelden.

  • Starten Sie die App erneut und klicken Sie auf Sign in to your account.

    Da das App-spezifische Zertifikat verfügbar ist, kommt es zur Authentifizierung zum Einsatz. Im folgenden Dialog müssen Sie das Zertifikat bestätigen. Nachdem Sie authentifiziert sind, gibt die Kontoseite die Auskunft, dass Sie vollen Zugriff haben.

Ziel: Sicheres Speichern der Benutzeranmeldeinformationen

Mithilfe des PasswordVault-Objekts können Sie Anmeldeinformationen (Benutzername/Kennwort) sicher in einer Windows Store-App speichern.

Ziel: Einrichten des Manifests für eine sichere App

Zum Angeben von Funktionen und Zertifikaten für Ihre Windows Store-App bearbeiten Sie das Paketmanifest der App.

Ziel: Anmelden beim Server

Die Windows Store-App für Onlinebanking veranschaulicht, wie die Anmeldung eines Benutzers für eine Onlinebankingsitzung behandelt wird. Der Server überprüft das Zertifikat des Benutzers, und die App zeigt basierend auf dem Ergebnis dieser Prüfung die entsprechende Seite an.

Ziel: Anfordern eines Zertifikats

Sie können ein Zertifikat mit einem vom Client generierten Schlüssel oder mit einem vom Server generierten Schlüssel anfordern. In der Windows Store-App für Onlinebanking werden diese beiden Verfahren mit den createRequestAsync- und importPfxDataAsync-Funktionen gezeigt.

Ziel: Erneuern eines Zertifikats

Das Erneuern eines Zertifikats ist so einfach wie das Anfordern eines neuen Zertifikats. Sie können einen vom Client generierten Schlüssel oder einen vom Server generierten Schlüssel verwenden. In der Windows Store-App für Onlinebanking werden diese beiden Verfahren mit den createRequestAsync- und importPfxDataAsync-Funktionen gezeigt.

Paketeinstellungen und App-Manifest

Zum Steuern der Bereitstellung einer Windows Store-App bearbeiten Sie eine App-Manifestdatei mit dem Namen "package.appxmanifest" oder "AppxManifest.xml". Sie können Visual Studio Express 2012 für Windows 8 verwenden, um Einstellungen auf die Manifestdatei anzuwenden, oder die Datei direkt bearbeiten.

Doppelklicken Sie im Projektmappen-Explorer auf package.appxmanifest, um den Manifest-Designer zu öffnen.

Paketeinstellungen: Eigenschaften der App-Benutzeroberfläche

Auf der Seite Anwendungsbenutzeroberfläche sind die folgenden Eigenschaften wie in der Tabelle aufgeführt festgelegt.

Eigenschaft Wert
Startseite default.html
Name anzeigen Alle Logos
Kurzname TBA
Vordergrundtext Dunkel
Hintergrundfarbe #000000
Benachrichtigungen bei gesperrtem Bildschirm (nicht festgelegt)
Ausgangsdrehung Hochformat

 

Paketeinstellungen: App-Funktionen

Auf der Seite Funktionen sind Internet (Client) und Private Netzwerke (Client und Server) aktiviert. Wenn ein freigegebenes Zertifikat verwendet werden soll, muss Freigegebene Benutzerzertifikate aktiviert sein. Weitere Informationen erhalten Sie in Einrichten von Zertifikatspeicherfunktionen.

Hinweis  Wenn Sie Smartcards mit der Banking-App verwenden möchten, müssen Sie die Funktion sharedUserCertificates im App-Manifest angeben.

Im folgenden Beispiel wird gezeigt, wie Sie die Funktionen der App im App-Manifest deklarieren. Der Code befindet sich in "package.appxmanifest".

<Capabilities>
   <Capability Name="privateNetworkClientServer" />
   <Capability Name="internetClient" />
<!--   <Capability Name="sharedUserCertificates"/>-->
 </Capabilities>

Paketeinstellungen: Zertifikatdeklarationen

Mithilfe von Zertifikatdeklarationen weisen Sie ein vertrauenswürdiges Stammzertifikat und andere digitale Zertifikate zu. In den folgenden Verfahren wird beschrieben, wie Sie den Deklarations-Designer zum Hinzufügen eines neuen Stammzertifikats verwenden. Weitere Informationen finden Sie unter Installieren von Zertifikaten mit dem Manifest.

Falls Zertifikate nicht unter Unterstützte Deklarationen aufgeführt ist, gehen Sie wie folgt vor, um ein Stammzertifikat hinzuzufügen.

  • Öffnen Sie die Seite Deklarationen.

  • Wählen Sie in der Dropdownliste Verfügbare Deklarationen die Option Zertifikate aus, und klicken Sie auf Hinzufügen.

    Der Zertifikat-Designer wird geöffnet.

  • Stellen Sie sicher, dass unter TrustFlags die Option ExclusiveTrust aktiviert ist.

  • Stellen Sie sicher, dass unter Auswahlkriterien die Option Automatisch auswählen aktiviert ist.

  • Klicken Sie unter Zertifikate auf Neu hinzufügen.

  • Geben Sie im Textfeld StoreName den Namen Root ein.

  • Geben Sie myroot.cer in das Textfeld Inhalt ein.

Im folgenden Beispiel wird gezeigt, wie Sie die Stamm- und Entwicklerzertifikate zuweisen. Der Code ist in "package.appxmanifest" enthalten.

<Extensions>
   <Extension Category="windows.certificates">
     <Certificates>
       <Certificate StoreName="Root" Content="myroot.cer" />
       <Certificate StoreName="CA" Content="mystandca.cer" />
       <TrustFlags ExclusiveTrust="true" />
       <SelectionCriteria AutoSelect="true" />
     </Certificates>
   </Extension>
 </Extensions>

Paketeigenschaften: Verpackungseigenschaften

Legen Sie auf der Seite Verpacken die Eigenschaft Paketname auf Microsoft.SDKSamples.TailoredBankAppShare und die Eigenschaft Paketanzeigename auf TailoredBankAppShare SDK Sample fest.

Anmelden beim Server mit Benutzername und Kennwort

Verwenden Sie PasswordVault, um die Kennwortanmeldeinformationen für eine sichere App abzurufen. Zur Optimierung der Sicherheit empfiehlt die Onlinebanking-App Benutzern die Aktualisierung auf zertifikatbasierte Authentifizierung.

Im folgenden Beispiel wird gezeigt, wie Sie die Anmeldung bei einer sicheren App mit Anmeldeinformationen (Benutzername/Kennwort) implementieren. Der Code ist in "scenario0.js" enthalten.

//account logon
// onClick() handler for the 'submitButton'
function logon() {
    try {
        var username = document.getElementById("username").value;
        var password = document.getElementById("password").value;

        //store user credential in the vault component
        if (username && password) {
            var cred = new Windows.Security.Credentials.PasswordCredential("WoodGrove-Bank-usercred", username, password);
            var vault = new Windows.Security.Credentials.PasswordVault();
            vault.add(cred);
        }else {
            return false;
        }
    }
    catch (err) {
        var message = '';
        for (var f in err) {
            message += f;
            message += ':';
            message += err[f];
            message += ' ';
        }
        goError(message);
        return false;
    }

    var params = "UserName=" + username;
    params += "&Password=" + password;

    WinJS.xhr({
        type: "POST",
        url: "Your URL",    //Please provide the server url here. For example:
                            //url: "https://WoodGrove-Bank/bankserver2/account/simplelogon",
        headers: { "Content-type": "application/x-www-form-urlencoded" },
        data: params
    }).then(
        function (request) {
            var obtainedData = window.JSON.parse(request.responseText);
            var /*@override*/ item = {
                title: "Account Page",
                content: "<strong>(Please upgrade to strong authentication if you need full access to your account.)",
                backgroundColor: 'rgba(25,50,200,1)',
                navigate: "groupeditemsPage"
            };
            WinJS.Navigation.navigate('/html/account.html', { item: item });
        },
        function (request) {
            goError("(The error was: <strong>" + request.message + "</strong>) <br>" 
                    + "The server URL you are using may not be valid. <br>"
                    + "Please contact your bank server service, "
                    + "or refer to the bank server walk through document for instructions to setup your own server.");
            return false;
        }
    );
};

Der Benutzername und das Kennwort werden PasswordVault hinzugefügt und mit der xhr-Funktion an den simplelogon-Endpunkt des Webdiensts gesendet. Wenn die Anforderung erfolgreich ist, wird "account.html" angezeigt.

Anfordern eines Zertifikats und Registrieren

Zur Optimierung der Sicherheit empfiehlt die Onlinebanking-App Benutzern die Aktualisierung auf zertifikatbasierte Authentifizierung. Sie können in der Client-App eine Zertifikatanforderung erstellen oder ein PFX-Zertifikat (Personal Information Exchange, Privater Informationsaustausch) vom Server importieren. In beiden Fällen registrieren Sie sich mit dem CertificateEnrollmentManager-Objekt.

Senden einer Zertifikatanforderung an einen Server

Die Windows Store-App kann eine Zertifikatanforderung an eine Zertifizierungsstelle senden, die Microsoft-Zertifikatdienste ausführt, und Sie können das ausgestellte Zertifikat mit CertificateEnrollmentManager installieren. Weitere Informationen finden Sie unter Senden einer Zertifikatanforderung und Installieren der Zertifikatantwort.

Im folgenden Beispiel wird gezeigt, wie Sie ein Zertifikat mit einem vom Client generierten Schlüssel anfordern. Der Code befindet sich in "enrollment.js".

//pkcs10 certification enrollment
function createRequestBlobAndEnroll(user)
{
    var encoded;
    try {
        //WinRT APIs for creating a certficate request
        var request = new Windows.Security.Cryptography.Certificates.CertificateRequestProperties;
        request.subject = user;
        request.friendlyName = user + "'s WoodGrove Bank Certificate";
        request.keyProtectionLevel = Windows.Security.Cryptography.Certificates.KeyProtectionLevel.noConsent;
        Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager.createRequestAsync(request).then(
            function (requestResult) {
                encoded = requestResult;
                   var installOption = 0; //Windows.Security.Cryptography.Certificates.InstallOptions.none;
                var params = "username=" + user;
                params += "&request=" + encodeURIComponent(encoded);
            
                WinJS.xhr({
                    type: "POST",
                    url: "Your URL",    //Please provide the server url here. For example:
                                        //url: "https://WoodGrove-Bank/bankserver2/enrollment/submit",
                    headers: { "Content-type": "application/x-www-form-urlencoded" },
                    data: params
                }).then(
                    function (/*@override*/request) {
                        var obtainedData = window.JSON.parse(request.responseText);
                        try {
                            // WinRT API for certficate enrollment
                            Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager
                                .installCertificateAsync(obtainedData.certificate, installOption ).then(
                            function() {
                                // set certificate enrollment mark to aviod redundant certificate enrollments
                                Windows.Storage.ApplicationData.current.localSettings.values["EnrollCertificate"] = true;

                                var /*@override*/ item = {
                                        title: "Account Page",
                                        content: 
"<strong>(Please sign out and re-launch the application so as to use your enrolled certificate.)<strong>",
                                        backgroundColor: 'rgba(191, 84, 46, 1)',
                                        navigate: "sign-out"
                                };
                                WinJS.Navigation.navigate('/html/account.html', { item: item });
                                return false;
                            },
                            function(installError) {
                                gotoError("(The error was: <strong>" + intallError.message + "</strong>)");
                                return false;
                            });
                        } catch (err) {
                            var /*@override*/ message = '';
                            for (var /*@override*/ f in err) {
                            message += f;
                            message += ':';
                            message += err[f];
                            message += ' ';
                        }
                            goError(message);
                            return false;
                        }
                    },
                    function (/*@override*/request) {
                        goError("(The error was: <strong>" + request.message + "</strong>) <br>" 
                        + "The server URL you are using may not be valid. <br>"
                        + "Please contact your bank server service, "
                        + "or refer to the bank server topic for instructions to setup your own server.");
                        return false;
                    });
            },
            function (requestError) {
                gotoError("(The error was: <strong>" + requestError.message + "</strong>)");
                return false;
            });
    }
    catch (err) {
        var message = '';
        for (var f in err) {
            message += f;
            message += ':';
            message += err[f];
            message += ' ';
        }
        goError(message);
        return false;
    };
}

Die createRequestBlobAndEnroll-Funktion generiert mithilfe des CertificateEnrollmentManager-Objekts eine Zertifikatanforderung und sendet diese an den Server. Wenn die Anforderung erfolgreich war, installiert die installCertificateAsync-Funktion das bereitgestellte Zertifikat.

Erneuern mit einem vom Client generierten Schlüssel

Die Vorgehensweise zum Erneuern eines Zertifikats ist im Grunde mit der für die erstmalige Installation des Zertifikats identisch, da Windows 8 das alte Zertifikat herausfiltert.

Im folgenden Beispiel wird gezeigt, wie Sie ein Zertifikat mit einem vom Client generierten Schlüssel anfordern. Der Code ist in "groupedItemsPage.js" enthalten.

//pkcs10 certificate renewal
function createRequestBlobAndEnroll(user) {
    var encoded;
    try {
        //WinRT APIs for creating a certficate request
        var request = new Windows.Security.Cryptography.Certificates.CertificateRequestProperties;
        request.subject = user;
        request.friendlyName = user + "'s WoodGrove Bank Certificate";
        request.keyProtectionLevel = Windows.Security.Cryptography.Certificates.KeyProtectionLevel.noConsent;
        Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager.createRequestAsync(request).then(
            function (requestResult) {
                encoded = requestResult;
                // No username or password required in this case - we already have a
                // client-authenticated SSL connection
                var installOption = 0; //Windows.Security.Cryptography.Certificates.InstallOptions.none;
                var params = "request=" + encodeURIComponent(encoded);
                WinJS.xhr({
                    type: "POST",
                    url: "Your URL",    //Please provide the server url here. For example:
                                        //url: "https://WoodGrove-Bank/bankserver2/renewal/renewP10",
                    headers: { "Content-type": "application/x-www-form-urlencoded" },
                    data: params
                }).then(
                    function (/*@override*/request) {
                        var obtainedData = window.JSON.parse(request.responseText);
                        // We do not need to remove the previous certificate first -
                        // Win8 filtering will take care of it.
                        try {
                            Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager
                                .installCertificateAsync(obtainedData.certificate, installOption).then(
                            function () {
                                var /*@override*/ item = {
                                    title: "Account Page",
                                    content: "",
                                    backgroundColor: 'rgba(25,50,200,1)',
                                    navigate: "sign-out"
                                };
                                WinJS.Navigation.navigate('/html/account.html', { item: item });
                            },
                            function (installError) {
                                gotoError("(The error was: <strong>" + intallError.message + "</strong>)");
                                return false;
                            });
                        } catch (err) {
                            var /*@override*/ message = '';
                            for (var /*@override*/ f in err) {
                                message += f;
                                message += ':';
                                message += err[f];
                                message += ' ';
                            };
                            goError(message);
                            return false;
                        };
                    },
                    function (/*@override*/request) {
                        goError("(The error was: <strong>" + request.message + "</strong>) <br>" 
                        + "The server URL you are using may not be valid. <br>"
                        + "Please contact your bank server service, "
                        + "or refer to the bank server walk through document for instructions to setup your own server.");
                        return false;
                    });
            },
            function (requestError) {
                gotoError("(The error was: <strong>" + requestError.message + "</strong>)");
                return false;
            });
    }
    catch (err) {
        var message = '';
        for (var f in err) {
            message += f;
            message += ':';
            message += err[f];
            message += ' ';
        }
        goError(message);
        return false;
    };
}

Die createRequestBlobAndEnroll-Funktion generiert mithilfe des CertificateEnrollmentManager-Objekts eine Zertifikatanforderung und sendet sie an den Server. Wenn die Anforderung erfolgreich war, installiert die installCertificateAsync-Funktion das bereitgestellte Zertifikat. Das alte Zertifikat muss nicht entfernt werden, da es von Windows 8 herausgefiltert wird.

Überprüfen eines Zertifikats

Sie können den Status eines Zertifikats abfragen und je nach Ergebnis unterschiedliche Seiten anzeigen.

Im folgenden Beispiel wird gezeigt, wie Sie den Status eines Zertifikats abfragen und je nach Ergebnis unterschiedliche Seiten anzeigen. Der Code ist in "groupedItemsPage.js" enthalten.

//check certification
function checkCert(senario, scenarioitem) {
    var params = "";
    WinJS.xhr({
        type: "POST",
        url: "Your URL",    //Please provide the server url here. For example:
                            //url: "https://WoodGrove-Bank/bankserver2/renewal/CheckCert",
        headers: { "Content-type": "application/x-www-form-urlencoded" },
        data: params
    }).then(
        function (request) {
            var obtainedData = window.JSON.parse(request.responseText);
            if (obtainedData.hasCert === true) {
                if (obtainedData.renew === true) {
                    if (obtainedData.pfx === true) {
                        doPFXRenewal(obtainedData.user);
                    }
                    else {
                        doPKCS10Renewal(obtainedData.user);
                    }
                }
                else {
                    var /*@override*/ item = {
                        title: "Account Page",
                        content: "",
                        backgroundColor: 'rgba(25,50,200,1)',
                        navigate: "sign-out"
                    };
                    WinJS.Navigation.navigate('/html/account.html', { item: item });
                }
            }
            else {
                switch (senario) {
                    case 0:
                        if (checkCredential()) {
                            var item2 = {
                                title: "Account Page",
                                content: 
"<strong>(Please upgrade to strong authentication if you need full access to your account. <br>"
+ "If you already upgraded to use strong authentication, please sign out and launch the app again and sign-in.)</strong>",
                                backgroundColor: 'rgba(191, 84, 46, 1)',
                                navigate: "groupeditemsPage"
                            };
                            WinJS.Navigation.navigate('/html/account.html', { item: item2 });
                        } else {
                            WinJS.Navigation.navigate('/html/scenario0.html', { item: scenarioitem });
                        }
                        break;
                    case 1:
                        if (checkCredential() && !checkEnrollment()) {
                            WinJS.Navigation.navigate('/html/enrollment.html', { item: scenarioitem });
                        }
                        else if (!checkEnrollment()) {
                            WinJS.Navigation.navigate('/html/scenario1.html', { item: scenarioitem });
                        }
                        else {
                            var item3 = {
                                title: "Account Page",
                                content: 
"<strong>(You already upgraded to use strong authentication. Please sign out and launch the app again and sign-in.)</strong>",
                                backgroundColor: 'rgba(191, 84, 46, 1)',
                                navigate: "sign-out"
                            };
                            WinJS.Navigation.navigate('/html/account.html', { item: item3 });
                        }
                        break;
                    default:
                        goError("unknown scenario!!!");
                        break;
                }
            }
            return false;
        },
        function (request) {
            goError("(The error was: <strong>" + request.message + "</strong>) <br>" 
                    + "The server URL you are using may not be valid. <br>"
                    + "Please contact your bank server service, "
                    + "or refer to the bank server walk through document for instructions to setup your own server.");
            return false;
        }
    );
}

Die checkCert-Funktion fragt den CheckCert-Endpunkt des Webdiensts ab und analysiert die Antwort. Wenn die Antwort ein Zertifikat ist, überprüft die App, ob das Zertifikat erneuert werden muss, und ruft die entsprechende Erneuerungsfunktion auf, falls dies der Fall ist. Andernfalls wird die sicher authentifizierte Kontoseite angezeigt

Aktualisieren auf zertifikatbasierte Authentifizierung

Zur Optimierung der Sicherheit empfiehlt die Onlinebanking-App Benutzern die Aktualisierung auf zertifikatbasierte Authentifizierung. Sie können in der Client-App eine Zertifikatanforderung erstellen oder ein PFX-Zertifikat (Personal Information Exchange, Privater Informationsaustausch) vom Server importieren. In beiden Fällen registrieren Sie sich mit dem CertificateEnrollmentManager-Objekt.

Importieren eines PFX-Zertifikats von einem Server

Im folgenden Beispiel wird gezeigt, wie Sie ein PFX-Zertifikat von einem Server importieren. Der Code ist in "enrollment.js" enthalten.

// pfx certificate enrollment
function doPFXEnrollment(user) {

    var exportable = Windows.Security.Cryptography.Certificates.ExportOption.exportable;
    var consent = Windows.Security.Cryptography.Certificates.KeyProtectionLevel.noConsent;
    var installOption = 0; //Windows.Security.Cryptography.Certificates.InstallOptions.none;
    var params = "username=" + user;

    WinJS.xhr({
        type: "POST",
        url: "Your URL",    //Please provide the server url here. For example:
                            //url: "https://WoodGrove-Bank/bankserver2/enrollment/getPFX",
        headers: { "Content-type": "application/x-www-form-urlencoded" },
        data: params
    }).then(
        function (request) {
            var obtainedData = window.JSON.parse(request.responseText);
            try {
                // import pfx certificate file into the app container
                Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager
                    .importPfxDataAsync(obtainedData.pfx, obtainedData.password, exportable, consent, 
                        installOption, obtainedData.friendlyName).then(
                    function () {
                // set certificate enrollment mark to aviod redundant certificate enrollments
                Windows.Storage.ApplicationData.current.localSettings.values["EnrollCertificate"] = true;
                var /*@override*/ item = {
                    title: "Account Page",
                    content: 
"<strong>(Please sign out and re-launch the application so as to use your enrolled certificate.)</strong>",
                    backgroundColor: 'rgba(191, 84, 46, 1)',
                    navigate: "sign-out"
                };
                WinJS.Navigation.navigate('/html/account.html', { item: item });
                return;
                    },
                    function(importError) {
                        gotoError("(The error was: <strong>" + requestError.message + "</strong>)");
                        return false;
                    }); 
            } catch (err) {
                var message = '';
                for (var f in err) {
                    message += f;
                    message += ':';
                    message += err[f];
                    message += ' ';
                }
                goError(message);
                return false;
            }
        },
        function (request) {
            goError("(The error was: <strong>" + request.message + "</strong>) <br>" 
                    + "The server URL you are using may not be valid. <br>"
                    + "Please contact your bank server service, "
                    + "or refer to the bank server walk through document for instructions to setup your own server.");
            return false;
        }
    );
}

Die doPFXEnrollment-Funktion versucht, eine Verbindung mit demgetPFX-Endpunkt des Webdiensts herzustellen. Wenn die Verbindung hergestellt werden kann, importiert das CertificateEnrollmentManager-Objekt das bereitgestellte Zertifikat und installiert es auf dem Client-PC.

Erneuern eines PFX-Zertifikats

Die Vorgehensweise zum Erneuern eines Zertifikats für privaten Informationsaustausch (PFX-Zertifikat) ist im Grunde mit der für die erstmalige Installation des Zertifikats identisch, da Windows 8 Consumer Preview das alte Zertifikat herausfiltert.

Im folgenden Beispiel wird gezeigt, wie Sie ein PFX-Zertifikat erneuern. Der Code ist in "groupedItemsPage.js" enthalten.

//pfx certificate renewal
function doPFXRenewal(user) {
    var exportable = Windows.Security.Cryptography.Certificates.ExportOption.exportable;
    var consent = Windows.Security.Cryptography.Certificates.KeyProtectionLevel.noConsent;
    var installOption = 0; //Windows.Security.Cryptography.Certificates.InstallOptions.none;
    var params = "username=" + user;
    WinJS.xhr({
        type: "POST",
        url: "Your URL",    //Please provide the server url here. For example:
                            //url: "https://WoodGrove-Bank/bankserver2/enrollment/getPFX",
        headers: { "Content-type": "application/x-www-form-urlencoded" },
        data: params
    }).then(
        function (request) {
            var obtainedData = window.JSON.parse(request.responseText);
            // We do not need to remove the previous certificate first -
            // Win8 filtering will take care of it.
            try {
                // No need to remove old cert, Windows will filter.
                Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager
                    .importPfxDataAsync(obtainedData.pfx, obtainedData.password, exportable, consent, 
                        installOption, obtainedData.friendlyName).then(
                    function () {
                        var /*@override*/ item = {
                            title: "Account Page",
                            content: "",
                            backgroundColor: 'rgba(25,50,200,1)',
                            navigate: "sign-out"
                        };
                        WinJS.Navigation.navigate('/html/account.html', { item: item });
                    },
                    function (importError) {
                        gotoError("(The error was: <strong>" + importError.message + "</strong>)");
                        return false;
                    });
            } catch (err) {
                var message = '';
                for (var f in err) {
                    message += f;
                    message += ':';
                    message += err[f];
                    message += ' ';
                };
                goError(message);
                return false;
            }

        },
        function (request) {
            goError("(The error was: <strong>" + request.message + "</strong>) <br>" 
                    + "The server URL you are using may not be valid. <br>"
                    + "Please contact your bank server service, "
                    + "or refer to the bank server walk through document for instructions to setup your own server.");
            return false;
        }
    );
}

Die doPFXRenewal-Funktion sendet eine PFX-Zertifikatanforderung an den Server. Wenn die Anforderung erfolgreich ist, importiert die importPfxDataAsync-Funktion das bereitgestellte Zertifikat und installiert es auf dem Client-PC. Das alte Zertifikat muss nicht entfernt werden, da es von Windows 8 herausgefiltert wird.

Verwandte Themen

CertificateEnrollmentManager

PasswordVault

Arbeiten mit Zertifikaten

Erstellen einer Windows Store-App für Onlinebanking

Erstellen einer Windows Store-App für Onlinebanking: Ressourcen