Sdílet prostřednictvím


Sdílení certifikátů mezi aplikacemi

Aplikace univerzální platformy Windows (UPW), které vyžadují zabezpečené ověřování nad rámec kombinace ID uživatele a hesla, můžou k ověřování používat certifikáty. Ověřování certifikátů poskytuje vysokou úroveň důvěryhodnosti při ověřování uživatele. V některých případech bude skupina služeb chtít ověřit uživatele pro více aplikací. Tento článek ukazuje, jak můžete ověřovat více aplikací pomocí stejného certifikátu a jak můžete uživateli poskytnout pohodlný kód k importu certifikátu poskytnutého pro přístup k zabezpečeným webovým službám.

Aplikace se můžou ověřit ve webové službě pomocí certifikátu a více aplikací může k ověření stejného uživatele použít jeden certifikát z úložiště certifikátů. Pokud certifikát v úložišti neexistuje, můžete do aplikace přidat kód pro import certifikátu ze souboru PFX.

Povolit Microsoft Internetové informační služby (IIS) a mapování klientských certifikátů

V tomto článku se používá internetová informační služba (IIS) pro ukázkové účely. Služba IIS není ve výchozím nastavení povolená. Službu IIS můžete povolit pomocí Ovládacích panelů.

  1. Otevřete Ovládací panely a vyberte Programy.
  2. Vyberte Zapnout nebo vypnout funkce systému Windows.
  3. Rozbalte Internetové informační služby a poté rozbalte Služby World Wide Web. Rozbalte funkce vývoje aplikací a vyberte ASP.NET 3.5 a ASP.NET 4.5. Provedením těchto výběrů se automaticky povolí Internetové informační služby.
  4. Kliknutím na tlačítko OK změny použijete.

Vytvoření a publikování zabezpečené webové služby

  1. Spusťte Microsoft Visual Studio jako správce a na úvodní stránce vyberte Nový projekt. Přístup správce je nutný k publikování webové služby na server služby IIS. V dialogovém okně Nový projekt změňte architekturu na rozhraní .NET Framework 3.5. Vyberte Visual C# –>Web –>Visual Studio –>ASP.NET webovou službu. Pojmenujte aplikaci FirstContosoBank. Kliknutím na OK vytvořte projekt.

  2. V souboru Service1.asmx.cs nahraďte výchozí webovou metodu HelloWorld následující metodou „Login“.

            [WebMethod]
            public string Login()
            {
                // Verify certificate with CA
                var cert = new System.Security.Cryptography.X509Certificates.X509Certificate2(
                    this.Context.Request.ClientCertificate.Certificate);
                bool test = cert.Verify();
                return test.ToString();
            }
    
  3. Uložte soubor Service1.asmx.cs.

  4. Ve "Průzkumníku řešení" klikněte pravým tlačítkem na aplikaci "FirstContosoBank" a vyberte Publikovat.

  5. V dialogovém okně Publikovat web vytvořte nový profil a pojmenujte ho ContosoProfile. Klikněte na Další.

  6. Na další stránce zadejte název serveru služby IIS a zadejte název webu Výchozí web/FirstContosoBank. Kliknutím na Publikovat publikujte webovou službu.

Nakonfigurujte webovou službu tak, aby používala ověřování klientských certifikátů.

  1. Spusťte správce internetové informační služby (IIS).
  2. Rozšiřte weby pro váš server IIS. V části Výchozí webvyberte novou webovou službu FirstContosoBank. V části Akce vyberte Upřesnit nastavení....
  3. Nastavte fondu aplikací na .NET v2.0 a klepněte na tlačítko OK.
  4. Vesprávce internetové informační služby (IIS) vyberte server služby IIS a poklikejte na Certifikáty serveru. V části Akce vyberte Vytvořit certifikát Self-Signed.... Jako popisný název certifikátu zadejte "ContosoBank" a klikněte na OK. Tím se vytvoří nový certifikát pro použití serverem SLUŽBY IIS ve formě "<název serveru>.<název domény>".
  5. Ve správci Internetové informační služby (IIS)vyberte výchozí web. V části Akce vyberte Vazby a potom klikněte na Přidat.... Jako typ vyberte "https", nastavte port na "443" a zadejte Úplný název hostitele pro váš server IIS ("<název serveru>.<název domény>"). Nastavte certifikát SSL na ContosoBank. Klikněte na OK. V okně vazby webu klikněte na Zavřít.
  6. Ve správci Internetové informační služby (IIS)vyberte webovou službu FirstContosoBank. Poklikejte na nastavení SSL. Zkontrolujte vyžadovat SSL. V části Klientské certifikátyvyberte Vyžadovat. V části Akce klepněte na tlačítko Použít.
  7. Webovou službu můžete ověřit tak, že otevřete webový prohlížeč a zadáte následující webovou adresu: "https://<název serveru>.<název domény>/FirstContosoBank/Service1.asmx". Například "https://myserver.example.com/FirstContosoBank/Service1.asmx". Pokud je vaše webová služba správně nakonfigurovaná, zobrazí se výzva k výběru klientského certifikátu, abyste získali přístup k webové službě.

Předchozí kroky můžete zopakovat a vytvořit více webových služeb, ke kterým se dá přistupovat pomocí stejného klientského certifikátu.

Vytvoření aplikace pro UPW, která používá ověřování certifikátů

Teď, když máte jednu nebo více zabezpečených webových služeb, můžou vaše aplikace k ověření těchto webových služeb použít certifikáty. Když provedete požadavek na ověřenou webovou službu pomocí objektu HttpClient, počáteční požadavek nebude obsahovat klientský certifikát. Ověřená webová služba odpoví žádostí o ověření klienta. Když k tomu dojde, klient Systému Windows automaticky odešle dotaz na úložiště certifikátů pro dostupné klientské certifikáty. Uživatel si může vybrat z těchto certifikátů, aby se ověřil ve webové službě. Některé certifikáty jsou chráněné heslem, takže budete muset uživateli poskytnout způsob, jak zadat heslo pro certifikát.

Pokud nejsou k dispozici žádné klientské certifikáty, uživatel bude muset přidat certifikát do úložiště certifikátů. Do aplikace můžete zahrnout kód, který uživateli umožní vybrat soubor PFX, který obsahuje klientský certifikát, a pak tento certifikát importovat do úložiště klientských certifikátů.

Tip Můžete použít makecert.exe k vytvoření souboru PFX, který se má použít v tomto rychlém startu. Informace o používání makecert.exenaleznete v tématu MakeCert.

 

  1. Otevřete Visual Studio a na úvodní stránce vytvořte nový projekt. Pojmenujte nový projekt FirstContosoBankApp. Kliknutím na OK vytvořte nový projekt.

  2. V souboru MainPage.xaml přidejte následující XAML do výchozího prvku Grid. Tento KÓD XAML obsahuje tlačítko pro vyhledání souboru PFX pro import, textové pole pro zadání hesla pro soubor PFX chráněného heslem, tlačítko pro import vybraného souboru PFX, tlačítko pro přihlášení k zabezpečené webové službě a blok textu pro zobrazení stavu aktuální akce.

    <Button x:Name="Import" Content="Import Certificate (PFX file)" HorizontalAlignment="Left" Margin="352,305,0,0" VerticalAlignment="Top" Height="77" Width="260" Click="Import_Click" FontSize="16"/>
    <Button x:Name="Login" Content="Login" HorizontalAlignment="Left" Margin="611,305,0,0" VerticalAlignment="Top" Height="75" Width="240" Click="Login_Click" FontSize="16"/>
    <TextBlock x:Name="Result" HorizontalAlignment="Left" Margin="355,398,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="153" Width="560"/>
    <PasswordBox x:Name="PfxPassword" HorizontalAlignment="Left" Margin="483,271,0,0" VerticalAlignment="Top" Width="229"/>
    <TextBlock HorizontalAlignment="Left" Margin="355,271,0,0" TextWrapping="Wrap" Text="PFX password" VerticalAlignment="Top" FontSize="18" Height="32" Width="123"/>
    <Button x:Name="Browse" Content="Browse for PFX file" HorizontalAlignment="Left" Margin="352,189,0,0" VerticalAlignment="Top" Click="Browse_Click" Width="499" Height="68" FontSize="16"/>
    <TextBlock HorizontalAlignment="Left" Margin="717,271,0,0" TextWrapping="Wrap" Text="(Optional)" VerticalAlignment="Top" Height="32" Width="83" FontSize="16"/>
    
  3. Uložte soubor MainPage.xaml.

  4. Do souboru MainPage.xaml.cs přidejte následující příkazy using.

    using Windows.Web.Http;
    using System.Text;
    using Windows.Security.Cryptography.Certificates;
    using Windows.Storage.Pickers;
    using Windows.Storage;
    using Windows.Storage.Streams;
    
  5. Do souboru MainPage.xaml.cs přidejte následující proměnné do třídy MainPage. Zadají adresu pro zabezpečenou metodu Login vaší webové služby FirstContosoBank a globální proměnnou, která obsahuje certifikát PFX pro import do úložiště certifikátů. Aktualizujte <název serveru> na plně kvalifikovaný název serveru pro server Microsoft Internet Information Server (IIS).

    private Uri requestUri = new Uri("https://<server-name>/FirstContosoBank/Service1.asmx?op=Login");
    private string pfxCert = null;
    
  6. Do souboru MainPage.xaml.cs přidejte následující obslužnou rutinu kliknutí pro přihlašovací tlačítko a metodu pro přístup k zabezpečené webové službě.

    private void Login_Click(object sender, RoutedEventArgs e)
    {
        MakeHttpsCall();
    }
    
    private async void MakeHttpsCall()
    {
    
        StringBuilder result = new StringBuilder("Login ");
        HttpResponseMessage response;
        try
        {
            Windows.Web.Http.HttpClient httpClient = new Windows.Web.Http.HttpClient();
            response = await httpClient.GetAsync(requestUri);
            if (response.StatusCode == HttpStatusCode.Ok)
            {
                result.Append("successful");
            }
            else
            {
                result = result.Append("failed with ");
                result = result.Append(response.StatusCode);
            }
        }
        catch (Exception ex)
        {
            result = result.Append("failed with ");
            result = result.Append(ex.Message);
        }
    
        Result.Text = result.ToString();
    }
    
  7. Do souboru MainPage.xaml.cs přidejte následující obslužné rutiny kliknutí: jednu pro tlačítko, které slouží k vyhledání souboru PFX, a druhou pro tlačítko, které slouží k importu vybraného souboru PFX do úložiště certifikátů.

    private async void Import_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            Result.Text = "Importing selected certificate into user certificate store....";
            await CertificateEnrollmentManager.UserCertificateEnrollmentManager.ImportPfxDataAsync(
                pfxCert,
                PfxPassword.Password,
                ExportOption.Exportable,
                KeyProtectionLevel.NoConsent,
                InstallOptions.DeleteExpired,
                "Import Pfx");
    
            Result.Text = "Certificate import succeeded";
        }
        catch (Exception ex)
        {
            Result.Text = "Certificate import failed with " + ex.Message;
        }
    }
    
    private async void Browse_Click(object sender, RoutedEventArgs e)
    {
    
        StringBuilder result = new StringBuilder("Pfx file selection ");
        FileOpenPicker pfxFilePicker = new FileOpenPicker();
        pfxFilePicker.FileTypeFilter.Add(".pfx");
        pfxFilePicker.CommitButtonText = "Open";
        try
        {
            StorageFile pfxFile = await pfxFilePicker.PickSingleFileAsync();
            if (pfxFile != null)
            {
                IBuffer buffer = await FileIO.ReadBufferAsync(pfxFile);
                using (DataReader dataReader = DataReader.FromBuffer(buffer))
                {
                    byte[] bytes = new byte[buffer.Length];
                    dataReader.ReadBytes(bytes);
                    pfxCert = System.Convert.ToBase64String(bytes);
                    PfxPassword.Password = string.Empty;
                    result.Append("succeeded");
                }
            }
            else
            {
                result.Append("failed");
            }
        }
        catch (Exception ex)
        {
            result.Append("failed with ");
            result.Append(ex.Message); ;
        }
    
        Result.Text = result.ToString();
    }
    
  8. Spusťte aplikaci a přihlaste se k zabezpečené webové službě a naimportujte soubor PFX do místního úložiště certifikátů.

Pomocí těchto kroků můžete vytvořit více aplikací, které používají stejný uživatelský certifikát pro přístup ke stejným nebo různým zabezpečeným webovým službám.