Menggunakan sertifikat TLS/SSL dalam kode Anda di Azure App Service

Dalam kode aplikasi, Anda dapat mengakses sertifikat publik atau privat yang Anda tambahkan ke App Service. Kode aplikasi Anda dapat bertindak sebagai klien dan mengakses layanan eksternal yang memerlukan autentikasi sertifikat, atau mungkin perlu melakukan tugas kriptografi. Panduan cara penggunaan ini menunjukkan cara menggunakan sertifikat publik atau privat dalam kode aplikasi Anda.

Pendekatan untuk menggunakan sertifikat dalam kode Anda menggunakan fungsionalitas TLS di App Service, yang mengharuskan aplikasi Anda berada di tingkat Dasar atau lebih tinggi. Jika aplikasi Anda berada di tingkat Gratis atau Bersama, Anda dapat menyertakan file sertifikat di repositori aplikasi Anda.

Jika Anda mengizinkan App Service mengelola sertifikat TLS/SSL, Anda dapat mempertahankan sertifikat dan kode aplikasi secara terpisah serta melindungi data sensitif Anda.

Prasyarat

Untuk mengikuti panduan cara ini:

Menemukan thumbprint

Di portal Azure, dari menu kiri, pilih App Services><app-name>.

Dari navigasi kiri aplikasi Anda, pilih Sertifikat, lalu pilih Bawa sertifikat Anda sendiri (.pfx) atau Sertifikat kunci publik (.cer).

Temukan sertifikat yang ingin Anda gunakan dan salin thumbprint.

Copy the certificate thumbprint

Membuat sertifikat dapat diakses

Untuk mengakses sertifikat di kode aplikasi Anda, tambahkan thumbprint-nya ke pengaturan aplikasi WEBSITE_LOAD_CERTIFICATES, dengan menjalankan perintah berikut di Cloud Shell:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_CERTIFICATES=<comma-separated-certificate-thumbprints>

Untuk membuat semua sertifikat Anda dapat diakses, atur nilainya ke *.

Catatan

Ketika WEBSITE_LOAD_CERTIFICATES diatur *, semua sertifikat yang ditambahkan sebelumnya dapat diakses oleh kode aplikasi. Jika Anda menambahkan sertifikat ke aplikasi nanti, hidupkan ulang aplikasi untuk membuat sertifikat baru dapat diakses oleh aplikasi Anda. Untuk informasi selengkapnya, lihat Saat memperbarui (memperbarui) sertifikat.

Memuat sertifikat di aplikasi Windows

Pengaturan aplikasi WEBSITE_LOAD_CERTIFICATES membuat sertifikat yang ditentukan dapat diakses oleh aplikasi yang dihosting Windows Anda di penyimpanan sertifikat Windows, di Pengguna Saat Ini\Saya.

Dalam kode C#, Anda mengakses sertifikat dengan thumbprint sertifikat. Kode berikut memuat sertifikat dengan thumbprint E661583E8FABEF4C0BEF694CBC41C28FB81CD870.

using System;
using System.Linq;
using System.Security.Cryptography.X509Certificates;

string certThumbprint = "E661583E8FABEF4C0BEF694CBC41C28FB81CD870";
bool validOnly = false;

using (X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
  certStore.Open(OpenFlags.ReadOnly);

  X509Certificate2Collection certCollection = certStore.Certificates.Find(
                              X509FindType.FindByThumbprint,
                              // Replace below with your certificate's thumbprint
                              certThumbprint,
                              validOnly);
  // Get the first cert with the thumbprint
  X509Certificate2 cert = certCollection.OfType<X509Certificate2>().FirstOrDefault();

  if (cert is null)
      throw new Exception($"Certificate with thumbprint {certThumbprint} was not found");

  // Use certificate
  Console.WriteLine(cert.FriendlyName);
  
  // Consider to call Dispose() on the certificate after it's being used, available in .NET 4.6 and later
}

Dalam kode Java, Anda mengakses sertifikat dari toko "Windows-MY" menggunakan bidang Nama Umum Subjek (lihat Sertifikat kunci umum). Kode berikut menunjukkan cara memuat sertifikat kunci privat:

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.PrivateKey;

...
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null); 
Certificate cert = ks.getCertificate("<subject-cn>");
PrivateKey privKey = (PrivateKey) ks.getKey("<subject-cn>", ("<password>").toCharArray());

// Use the certificate and key
...

Untuk bahasa yang tidak mendukung atau menawarkan dukungan yang tidak memadai untuk penyimpanan sertifikat Windows, lihat Memuat sertifikat dari file.

Memuat sertifikat dari file

Jika Anda perlu memuat file sertifikat yang Anda unggah secara manual, lebih baik mengunggah sertifikat menggunakan FTPS, bukan Git, misalnya. Anda harus menyimpan data sensitif seperti sertifikat privat di luar kontrol sumber.

Catatan

ASP.NET dan ASP.NET Core pada Windows harus mengakses penyimpanan sertifikat meskipun Anda memuat sertifikat dari file. Untuk memuat file sertifikat di aplikasi Windows .NET, muat profil pengguna saat ini dengan perintah berikut di Cloud Shell:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_USER_PROFILE=1

Pendekatan untuk menggunakan sertifikat dalam kode Anda menggunakan fungsionalitas TLS di App Service, yang mengharuskan aplikasi Anda berada di tingkat Dasar atau lebih tinggi.

Contoh C# berikut memuat sertifikat publik dari jalur relatif di aplikasi Anda:

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;

...
var bytes = File.ReadAllBytes("~/<relative-path-to-cert-file>");
var cert = new X509Certificate2(bytes);

// Use the loaded certificate

Untuk melihat cara memuat sertifikat TLS/SSL dari file di Node.js, PHP, Python, atau Java, lihat dokumentasi untuk masing-masing bahasa atau platform web.

Memuat sertifikat dalam kontainer Linux/Windows

Pengaturan WEBSITE_LOAD_CERTIFICATES aplikasi membuat sertifikat yang ditentukan dapat diakses oleh kontainer kustom Windows atau Linux Anda (termasuk kontainer Linux bawaan) sebagai file. File ditemukan di bawah direktori berikut:

Platform kontainer Sertifikat publik Sertifikat privat
Kontainer Windows C:\appservice\certificates\public C:\appservice\certificates\private
Kontainer Linux /var/ssl/certs /var/ssl/private

Nama berkas sertifikat adalah thumbprint sertifikat.

Catatan

Layanan Aplikasi menyuntikkan jalur sertifikat ke dalam kontainer Windows sebagai variabel lingkungan berikut WEBSITE_PRIVATE_CERTS_PATH, WEBSITE_INTERMEDIATE_CERTS_PATH, WEBSITE_PUBLIC_CERTS_PATH, dan WEBSITE_ROOT_CERTS_PATH. Lebih baik mereferensikan jalur sertifikat dengan variabel lingkungan, bukan hardcoding jalur sertifikat, jika jalur sertifikat berubah di masa depan.

Selain itu, kontainer Windows Server Core memuat sertifikat ke penyimpanan sertifikat secara otomatis, di LocalMachine\My. Untuk memuat sertifikat, ikuti pola yang sama dengan Memuat sertifikat di aplikasi Windows. Untuk kontainer berbasis Windows Nano, gunakan jalur file ini Muat sertifikat langsung dari file.

Kode C# berikut menunjukkan cara memuat sertifikat publik di aplikasi Linux.

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;

...
var bytes = File.ReadAllBytes("/var/ssl/certs/<thumbprint>.der");
var cert = new X509Certificate2(bytes);

// Use the loaded certificate

Kode C# berikut menunjukkan cara memuat sertifikat privar di aplikasi Linux.

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
...
var bytes = File.ReadAllBytes("/var/ssl/private/<thumbprint>.p12");
var cert = new X509Certificate2(bytes);

// Use the loaded certificate

Untuk melihat cara memuat sertifikat TLS/SSL dari file di Node.js, PHP, Python, atau Java, lihat dokumentasi untuk masing-masing bahasa atau platform web.

Saat memperbarui (memperbarui) sertifikat

Saat Anda memperbarui sertifikat dan menambahkannya ke aplikasi, sertifikat tersebut mendapatkan thumbprint baru, yang juga perlu dibuat dapat diakses. Cara kerjanya tergantung pada jenis sertifikat Anda.

Jika Anda mengunggah sertifikat publik atau privat secara manual:

  • Jika Anda mencantumkan thumbprint secara eksplisit di WEBSITE_LOAD_CERTIFICATES, tambahkan thumbprint baru ke pengaturan aplikasi.
  • Jika WEBSITE_LOAD_CERTIFICATES diatur ke *, mulai ulang aplikasi untuk membuat sertifikat baru dapat diakses.

Jika Anda memperbarui sertifikat di Key Vault, seperti dengan sertifikat App Service, sinkronisasi harian dari Key Vault membuat pembaruan yang diperlukan secara otomatis saat menyinkronkan aplikasi Anda dengan sertifikat yang diperbarui.

  • Jika WEBSITE_LOAD_CERTIFICATES berisi thumbprint lama sertifikat yang diperbarui, sinkronisasi harian memperbarui thumbprint lama ke thumbprint baru secara otomatis.
  • Jika WEBSITE_LOAD_CERTIFICATES diatur ke *, sinkronisasi harian membuat sertifikat baru dapat diakses secara otomatis.

Sumber daya lainnya