Latihan - Gunakan sertifikat klien untuk mengamankan akses ke API

Selesai

Anda mengonfigurasi API Management untuk menerima sertifikat klien dengan menggunakan kebijakan masuk.

Misalkan perusahaan cuaca Anda telah memutuskan untuk mengamankan API-nya melalui autentikasi sertifikat untuk klien tertentu yang sudah menggunakan autentikasi sertifikat di sistem lain. Penyiapan ini akan memungkinkan klien tersebut untuk menggunakan sertifikat yang ada untuk mengautentikasi diri mereka sendiri terhadap gateway API Management.

Di unit ini, Anda akan:

  • Membuat sertifikat yang ditandatangani sendiri
  • Mengonfigurasi gateway untuk meminta sertifikat klien
  • Dapatkan thumbprint untuk sertifikat
  • Edit kebijakan masuk untuk memperbolehkan hanya klien dengan sertifikat yang ditentukan dalam permintaan mereka
  • Hubungi gateway API Management dan berikan sertifikat menggunakan curl

Catatan

Latihan ini menggunakan sumber daya yang Anda siapkan di latihan sebelumnya.

Membuat sertifikat yang ditandatangani sendiri

Pertama, gunakan Cloud Shell untuk membuat sertifikat yang ditandatangani sendiri, yang kemudian akan Anda gunakan untuk autentikasi antara klien dan gateway API Management.

  1. Untuk membuat kunci pribadi dan sertifikat, jalankan perintah berikut di Cloud Shell.

    pwd='Pa$$w0rd'
    pfxFilePath='selfsigncert.pfx'
    openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out selfsigncert.crt -subj /CN=localhost
    

    Untuk membuat contoh ini mudah diikuti, perintah sebelumnya menyertakan kata sandi yang digunakan untuk mengamankan kunci privat. Setiap kali Anda membuat kunci privat untuk penggunaan Anda sendiri, pastikan Anda membuat kata sandi yang aman dan mengontrol akses ke kunci tersebut dengan tepat.

  2. Sekarang, konversikan sertifikat ke format PEM, yang dapat digunakan oleh alat curl, dengan menjalankan perintah ini:

    openssl pkcs12 -export -out $pfxFilePath -inkey privateKey.key -in selfsigncert.crt -password pass:$pwd
    openssl pkcs12 -in selfsigncert.pfx -out selfsigncert.pem -nodes
    

    Saat Anda dimintai kata sandi, masukkan Pa$$w0rd, lalu tekan Enter.

Mengonfigurasi gateway untuk meminta sertifikat klien

Karena Anda menggunakan tingkat Konsumsi untuk API Management, Anda harus mengonfigurasi gateway untuk menerima sertifikat klien. ikuti langkah berikut.

  1. Dari portal Azure yang sudah terbuka, pilih layanan API Management Anda (apim-WeatherDataNNNN).

  2. Di panel menu kiri, di Penyebaran dan infrastruktur, pilih Domain kustom. Panel Domain kustom untuk layanan API Management Anda muncul.

  3. Untuk *Minta sertifikat klien, pilih Ya, dan pada bilah menu atas, pilih Simpan.

    Configure the gateway to request certificates.

Dapatkan thumbprint untuk sertifikat

Di bagian ini, Anda akan mengonfigurasi API Management untuk menerima permintaan hanya jika permintaan tersebut memiliki sertifikat dengan thumbprint (sidik jari) tertentu. Ayo ambil thumbprint tersebut dari sertifikat.

Catatan

Thumbprint sertifikat SSL juga dikenal sebagai thumbprint sertifikat SSL.

  1. Di Cloud Shell, jalankan kode berikut.

    Fingerprint="$(openssl x509 -in selfsigncert.pem -noout -fingerprint)"
    Fingerprint="${Fingerprint//:}"
    echo ${Fingerprint#*=}
    
  2. Salin output lengkap (string heksadesimal) dan tempelkan nilai sidik jari ini ke dalam file teks.

Edit kebijakan masuk untuk hanya memperbolehkan permintaan dengan sertifikat yang valid

Sekarang, buat kebijakan autentikasi dalam gateway API Management.

  1. Di portal Azure, pilih layanan API Management Anda. Jika perlu, di menu sumber daya Azure, atau dari halaman beranda, pilih Semua sumber daya, lalu pilih layanan API Management Anda.

  2. Di panel menu kiri, di bawah API, pilih API. Panel API muncul untuk layanan API Management Anda muncul.

  3. Di menu sekunder, pilih Data Cuaca.

  4. Di kotak Pemrosesan masuk, pilih ikon </> untuk membuka Editor kode kebijakan. Kode HTML untuk node kebijakan ditampilkan.

    Inbound processing policy button.

  5. Ganti node <inbound> dari file kebijakan dengan XML berikut, menggantikan sidik jari yang Anda salin sebelumnya untuk tempat penampung desired-fingerprint:

    <inbound>
        <choose>
            <when condition="@(context.Request.Certificate == null || context.Request.Certificate.Thumbprint != "desired-fingerprint")" >
                <return-response>
                    <set-status code="403" reason="Invalid client certificate" />
                </return-response>
            </when>
        </choose>
        <base />
    </inbound>
    
  6. Pilih Simpan.

Hubungi gateway dan berikan sertifikat klien

Anda sekarang dapat menguji kebijakan autentikasi baru dengan dan tanpa sertifikat.

  1. Untuk menguji API tanpa sertifikat, jalankan perintah berikut di Cloud Shell, mengganti nilai placeholder dengan nama gateway API dan kunci langganan Anda.

    curl -X -v GET https://[api-gateway-name].azure-api.net/api/Weather/53/-1 \
      -H 'Ocp-Apim-Subscription-Key: [Subscription Key]' 
    

    Perintah ini harus mengembalikan kesalahan sertifikat Klien 403, dan tidak ada data yang akan dikembalikan.

  2. Di Cloud Shell, untuk menguji API dengan sertifikat, salin dan tempel perintah cURL berikut, menggunakan kunci langganan utama dari latihan pertama (Anda juga bisa mendapatkan kunci utama ini dari panel Langganan untuk layanan API Management WeatherData Anda). Jangan lupa menyertakan nama gateway API Anda.

    curl -X GET https://[api-gateway-name].azure-api.net/api/Weather/53/-1 \
      -H 'Ocp-Apim-Subscription-Key: [subscription-key]' \
      --cert-type pem \
      --cert selfsigncert.pem
    

    Perintah ini akan menghasilkan respons yang berhasil mirip dengan kode berikut ini.

    {"mainOutlook":{"temperature":32,"humidity":34},"wind":{"speed":11,"direction":239.0},"date":"2019-05-16T00:00:00+00:00","latitude":53.0,"longitude":-1.0}