Bagikan melalui


Berbagi sertifikat antar aplikasi

Aplikasi Universal Windows Platform (UWP) yang memerlukan autentikasi aman di luar id pengguna dan kombinasi kata sandi dapat menggunakan sertifikat untuk autentikasi. Autentikasi sertifikat memberikan tingkat kepercayaan yang tinggi saat mengautentikasi pengguna. Dalam beberapa kasus, sekelompok layanan akan ingin mengautentikasi pengguna untuk beberapa aplikasi. Artikel ini memperlihatkan bagaimana Anda dapat mengautentikasi beberapa aplikasi menggunakan sertifikat yang sama, dan bagaimana Anda dapat menyediakan kode yang nyaman bagi pengguna untuk mengimpor sertifikat yang disediakan untuk mengakses layanan web aman.

Aplikasi dapat mengautentikasi ke layanan web menggunakan sertifikat, dan beberapa aplikasi dapat menggunakan satu sertifikat dari penyimpanan sertifikat untuk mengautentikasi pengguna yang sama. Jika sertifikat tidak ada di penyimpanan, Anda dapat menambahkan kode ke aplikasi Anda untuk mengimpor sertifikat dari file PFX.

Mengaktifkan Microsoft Internet Information Services (IIS) dan pemetaan sertifikat klien

Artikel ini menggunakan Microsoft Internet Information Services (IIS) untuk tujuan contoh. IIS tidak diaktifkan secara default. Anda dapat mengaktifkan IIS dengan menggunakan Panel Kontrol.

  1. Buka Panel Kontrol dan pilih program .
  2. Pilih Mengaktifkan atau menonaktifkan fitur Windows.
  3. Perluas Layanan Informasi Internet lalu perluas World Wide Web Services. Perluas Fitur Pengembangan Aplikasi dan pilih ASP.NET 3,5 dan ASP.NET 4,5. Membuat pilihan ini akan secara otomatis mengaktifkan Internet Information Services.
  4. Klik OK untuk menerapkan perubahan.

Membuat dan menerbitkan layanan web aman

  1. Jalankan Microsoft Visual Studio sebagai administrator dan pilih Proyek Baru dari halaman mulai. Akses administrator diperlukan untuk menerbitkan layanan web ke server IIS. Dalam dialog Proyek Baru, ubah kerangka kerja menjadi .NET Framework 3.5. Pilih Visual C# -Web -Visual Studio -Aplikasi Layanan WebASP.NET . Beri nama aplikasi "FirstContosoBank". Klik OK untuk membuat proyek.

  2. Dalam file Service1.asmx.cs, ganti metode web HelloWorld default dengan metode "Masuk" berikut.

            [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. Simpan file Service1.asmx.cs.

  4. DiPenjelajah Solusi , klik kanan aplikasi "FirstContosoBank" dan pilih Terbitkan.

  5. Dalam dialog Terbitkan Web, buat profil baru dan beri nama "ContosoProfile". Klik Berikutnya.

  6. Pada halaman berikutnya, masukkan nama server untuk server IIS Anda, dan tentukan nama situs "Situs Web Default/FirstContosoBank". Klik Terbitkan untuk menerbitkan layanan web Anda.

Mengonfigurasi layanan web Anda untuk menggunakan autentikasi sertifikat klien

  1. Jalankan Manajer Internet Information Services (IIS).
  2. Perluas situs untuk server IIS Anda. Di bawah Situs Web Default, pilih layanan web baru "FirstContosoBank". Di bagian Tindakan, pilih Pengaturan Lanjutan ....
  3. Atur Kumpulan Aplikasi ke .NET v2.0 dan klik OK.
  4. Di Manajer Internet Information Services (IIS), pilih server IIS Anda lalu klik ganda Sertifikat Server. Di bagian Tindakan , pilih Buat Sertifikat Self-Signed.... Masukkan "ContosoBank" sebagai nama yang mudah diingat untuk sertifikat dan klik OK. Ini akan membuat sertifikat baru untuk digunakan oleh server IIS dalam bentuk "<nama server>.<>nama domain ".
  5. Di Manajer Internet Information Services (IIS), pilih situs web default. Di bagian Tindakan, pilih Pengikatan lalu klik Tambahkan.... Pilih "https" sebagai jenis, atur port ke "443", dan masukkan nama host lengkap untuk server IIS Anda ("<nama server>.<nama domain>"). Atur sertifikat SSL ke "ContosoBank". Klik OK. Klik Tutup di jendela Pengikatan Situs.
  6. DiManajer Layanan Informasi Internet (IIS) , pilih layanan web "FirstContosoBank". Klik dua kali Pengaturan SSL. Periksa MemerlukanSSL . Di bawah sertifikat Klien, pilih Wajibkan. Di bagian Tindakan, klik Terapkan.
  7. Anda dapat memverifikasi bahwa layanan web dikonfigurasi dengan benar dengan membuka browser web Anda dan memasukkan alamat web berikut: "https://<nama server>.<nama domain>/FirstContosoBank/Service1.asmx". Misalnya, "https://myserver.example.com/FirstContosoBank/Service1.asmx". Jika layanan web Anda dikonfigurasi dengan benar, Anda akan diminta untuk memilih sertifikat klien untuk mengakses layanan web.

Anda dapat mengulangi langkah-langkah sebelumnya untuk membuat beberapa layanan web yang dapat diakses menggunakan sertifikat klien yang sama.

Membuat aplikasi UWP yang menggunakan autentikasi sertifikat

Sekarang setelah Anda memiliki satu atau beberapa layanan web yang aman, aplikasi Anda dapat menggunakan sertifikat untuk mengautentikasi ke layanan web tersebut. Saat Anda membuat permintaan ke layanan web terautentikasi menggunakan objek HttpClient , permintaan awal tidak akan berisi sertifikat klien. Layanan web yang diautentikasi akan merespons dengan permintaan untuk autentikasi klien. Ketika ini terjadi, klien Windows akan secara otomatis meminta penyimpanan sertifikat untuk sertifikat klien yang tersedia. Pengguna Anda dapat memilih dari sertifikat ini untuk mengautentikasi ke layanan web. Beberapa sertifikat dilindungi kata sandi, jadi Anda harus memberi pengguna cara untuk memasukkan kata sandi untuk sertifikat.

Jika tidak ada sertifikat klien yang tersedia, maka pengguna harus menambahkan sertifikat ke penyimpanan sertifikat. Anda dapat menyertakan kode di aplikasi yang memungkinkan pengguna memilih file PFX yang berisi sertifikat klien lalu mengimpor sertifikat tersebut ke penyimpanan sertifikat klien.

Tip Anda dapat menggunakan makecert.exe untuk membuat file PFX dengan panduan cepat ini. Untuk informasi tentang menggunakan makecert.exe, lihat MakeCert.

 

  1. Buka Visual Studio dan buat proyek baru dari halaman mulai. Beri nama proyek baru "FirstContosoBankApp". Klik OK untuk membuat proyek baru.

  2. Dalam file MainPage.xaml, tambahkan XAML berikut ke elemen Grid default . XAML ini menyertakan tombol untuk menelusuri file PFX yang akan diimpor, kotak teks untuk memasukkan kata sandi untuk file PFX yang dilindungi kata sandi, tombol untuk mengimpor file PFX yang dipilih, tombol untuk masuk ke layanan web aman, dan blok teks untuk menampilkan status tindakan saat ini.

    <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. Simpan file MainPage.xaml.

  4. Dalam file MainPage.xaml.cs, tambahkan pernyataan penggunaan berikut.

    using Windows.Web.Http;
    using System.Text;
    using Windows.Security.Cryptography.Certificates;
    using Windows.Storage.Pickers;
    using Windows.Storage;
    using Windows.Storage.Streams;
    
  5. Dalam file MainPage.xaml.cs, tambahkan variabel berikut ke kelas MainPage. Mereka menentukan alamat untuk metode "Login" yang aman dari layanan web "FirstContosoBank" Anda, serta menentukan variabel global yang digunakan untuk menyimpan sertifikat PFX yang akan diimpor ke penyimpanan sertifikat. Perbarui <nama server> ke nama server lengkap yang memenuhi syarat untuk server Microsoft Internet Information Server (IIS) Anda.

    private Uri requestUri = new Uri("https://<server-name>/FirstContosoBank/Service1.asmx?op=Login");
    private string pfxCert = null;
    
  6. Dalam file MainPage.xaml.cs, tambahkan penanganan klik berikut untuk tombol masuk dan metode untuk mengakses layanan web aman.

    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. Dalam file MainPage.xaml.cs, tambahkan pengendali klik berikut untuk tombol yang digunakan untuk menelusuri file PFX dan tombol yang digunakan untuk mengimpor file PFX yang dipilih ke dalam penyimpanan sertifikat.

    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. Jalankan aplikasi Anda dan masuk ke layanan web aman Anda serta impor file PFX ke penyimpanan sertifikat lokal.

Anda dapat menggunakan langkah-langkah ini untuk membuat beberapa aplikasi yang menggunakan sertifikat pengguna yang sama untuk mengakses layanan web aman yang sama atau berbeda.