Menyiapkan TLS yang diautentikasi backend

Halaman ini memberikan petunjuk untuk menyiapkan TLS yang diautentikasi backend, yang juga dikenal sebagai autentikasi backend, dengan menggunakan sertifikat yang dikelola sendiri.

Untuk mengonfigurasi TLS yang diautentikasi backend, Anda harus melakukan hal berikut. Langkah-langkah ini dijelaskan di bagian berikut dalam dokumen ini.

  • Buat resource konfigurasi kepercayaan yang terdiri dari root certificate dan intermediate certificate.
  • Buat resource konfigurasi autentikasi backend yang mereferensikan konfigurasi kepercayaan.
  • Lampirkan resource konfigurasi autentikasi backend ke layanan backend load balancer.

Sebelum memulai

Izin

Bagian ini mencantumkan izin yang diperlukan untuk mengonfigurasi TLS yang diautentikasi backend.
Operasi Izin
Membuat konfigurasi kepercayaan certificatemanager.trustconfigs.create pada target Google Cloud project
Buat resource konfigurasi autentikasi backend
  • certificatemanager.certs.use pada sertifikat target
  • certificatemanager.trustconfigs.use pada konfigurasi kepercayaan target
  • networksecurity.backendauthenticationconfigs.create di project Google Cloud target
  • Lampirkan resource konfigurasi autentikasi backend ke layanan backend load balancer
  • compute.backendservice.update pada layanan backend target
  • networksecurity.backendauthenticationconfigs.use pada resource konfigurasi autentikasi backend target
  • Ringkasan penyiapan

    Bagian berikutnya menjelaskan langkah-langkah untuk mengonfigurasi TLS berbasis autentikasi backend berdasarkan arsitektur yang ditunjukkan dalam diagram berikut.

    Komponen TLS yang diautentikasi backend.
    Komponen TLS yang diautentikasi backend (klik untuk memperbesar).

    Buat sertifikat root dan perantara

    Bagian ini menggunakan library OpenSSL untuk membuat sertifikat root (anchor tepercaya) dan sertifikat perantara.

    Root certificate berada di bagian atas rantai sertifikat. Intermediate certificate adalah bagian dari rantai kepercayaan kembali ke root certificate. Intermediate certificate ditandatangani secara kriptografis oleh root certificate. Saat menerima sertifikat server, load balancer akan memvalidasinya dengan membuat rantai kepercayaan dari sertifikat server kembali ke trust anchor yang dikonfigurasi.

    Gunakan perintah berikut untuk membuat sertifikat root dan perantara.

    1. Buat file konfigurasi OpenSSL.

      Dalam contoh berikut, file konfigurasi (example.cnf) berisi bagian [ca_exts], yang menentukan ekstensi X.509 yang menandai sertifikat sebagai cocok untuk CA. Untuk mempelajari lebih lanjut persyaratan sertifikat root dan perantara, lihat Persyaratan sertifikat.

      cat > example.cnf << EOF
      [req]
      distinguished_name = empty_distinguished_name
      
      [empty_distinguished_name]
      # Kept empty to allow setting via -subj command-line argument.
      
      [ca_exts]
      basicConstraints=critical,CA:TRUE
      keyUsage=keyCertSign
      extendedKeyUsage=serverAuth
      
      EOF
      
    2. Buat sertifikat root X.509 yang ditandatangani sendiri (root.cert). Sertifikat root ditandatangani sendiri dengan kunci pribadinya sendiri (root.key).

      openssl req -x509 \
          -new -sha256 -newkey rsa:2048 -nodes \
          -days 3650 -subj '/CN=root' \
          -config example.cnf \
          -extensions ca_exts \
          -keyout root.key -out root.cert
      
    3. Buat permintaan penandatanganan sertifikat (CSR) int.req untuk sertifikat perantara.

      openssl req -new \
          -sha256 -newkey rsa:2048 -nodes \
          -subj '/CN=int' \
          -config example.cnf \
          -extensions ca_exts \
          -keyout int.key -out int.req
      
    4. Tandatangani CSR untuk membuat sertifikat perantara X.509 (int.cert). CSR ditandatangani menggunakan sertifikat root.

      openssl x509 -req \
          -CAkey root.key -CA root.cert \
          -set_serial 1 \
          -days 3650 \
          -extfile example.cnf \
          -extensions ca_exts \
          -in int.req -out int.cert
      

    Memformat sertifikat

    Untuk menyertakan sertifikat baru atau yang sudah ada di penyimpanan tepercaya, format sertifikat menjadi satu baris dan simpan di variabel lingkungan sehingga dapat dirujuk oleh file YAML konfigurasi tepercaya.

    export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    
    export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    

    Membuat konfigurasi kepercayaan

    Konfigurasi kepercayaan adalah resource yang merepresentasikan konfigurasi infrastruktur kunci publik (PKI) Anda di Certificate Manager.

    Untuk membuat resource konfigurasi kepercayaan, selesaikan langkah-langkah berikut:

    Konsol

    1. Di konsol Google Cloud , buka halaman Certificate Manager.

      Buka Certificate Manager

    2. Di tab Trust Configs, klik Add Trust Config.

    3. Masukkan nama untuk konfigurasi.

    4. Untuk Lokasi, pilih Global atau Regional.

      Lokasi menunjukkan tempat penyimpanan resource konfigurasi kepercayaan. Untuk Load Balancer Aplikasi eksternal global, buat resource konfigurasi kepercayaan global. Untuk Load Balancer Aplikasi eksternal regional dan Load Balancer Aplikasi internal regional, buat resource konfigurasi kepercayaan regional.

    5. Di bagian Trust store, klik Add trust anchor dan upload file sertifikat yang dienkode PEM, atau salin konten sertifikat.

    6. Klik Tambahkan.

    7. Di bagian Trust store, klik Add intermediate CA dan upload file sertifikat yang dienkode PEM, atau salin konten sertifikat. Langkah ini memungkinkan Anda menambahkan tingkat kepercayaan lain antara sertifikat root dan sertifikat server Anda.

    8. Klik Tambahkan untuk menambahkan CA perantara.

    9. Untuk menambahkan sertifikat yang Anda tambahkan ke daftar yang diizinkan, klik Tambahkan.

    10. Klik Buat.

    Pastikan resource konfigurasi kepercayaan baru muncul dalam daftar konfigurasi.

    gcloud

    1. Buat file YAML konfigurasi kepercayaan (trust_config.yaml) yang menentukan parameter konfigurasi kepercayaan. Contoh resource konfigurasi kepercayaan ini berisi trust store dengan anchor kepercayaan dan sertifikat perantara. Contoh resource konfigurasi kepercayaan ini membaca konten sertifikat dari variabel lingkungan yang dibuat pada langkah Format sertifikat sebelumnya.

      cat << EOF > trust_config.yaml
      trustStores:
      - trustAnchors:
        - pemCertificate: "${ROOT_CERT}"
        intermediateCas:
        - pemCertificate: "${INTERMEDIATE_CERT}"
      EOF
      

      Untuk membuat penyimpanan tepercaya dengan sertifikat intermediate atau anchor tepercaya tambahan, tambahkan baris pemCertificate di bagian yang sesuai.

    2. Untuk mengimpor file YAML konfigurasi kepercayaan, gunakan perintah gcloud certificate-manager trust-configs import.

      global

      Untuk Load Balancer Aplikasi eksternal global, tentukan global sebagai lokasi penyimpanan resource konfigurasi tepercaya.

      gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME  \
          --source=trust_config.yaml \
          --location=global
      

      Ganti TRUST_CONFIG_NAME dengan nama konfigurasi kepercayaan.

      regional

      Untuk Load Balancer Aplikasi eksternal regional dan Load Balancer Aplikasi internal regional, tentukan region tempat resource konfigurasi tepercaya disimpan.

      gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \
          --source=trust_config.yaml \
          --location=REGION
      

      Ganti kode berikut:

      • TRUST_CONFIG_NAME: nama resource konfigurasi kepercayaan
      • REGION: region tempat resource konfigurasi kepercayaan disimpan

    Buat resource konfigurasi autentikasi backend

    Untuk membuat resource konfigurasi autentikasi backend (BackendAuthenticationConfig), selesaikan langkah-langkah berikut.

    Konsol

    1. Di konsol Google Cloud , buka halaman Authentication Configuration.

      Buka Konfigurasi Autentikasi

    2. Di tab Backend Authentication, klik Create.
    3. Masukkan nama untuk resource konfigurasi autentikasi backend.
    4. Untuk Lokasi, pilih Global atau Regional.
    5. Opsional: Pilih root tepercaya publik.
    6. Pilih resource konfigurasi kepercayaan yang Anda buat sebelumnya.
    7. Klik Buat.

    Verifikasi bahwa resource konfigurasi autentikasi backend ditampilkan.

    gcloud

    1. Buat file YAML yang secara deklaratif menentukan berbagai atribut dari resource konfigurasi autentikasi backend.

      global

      cat << EOF > BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml
      name: projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
      trustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      wellKnownRoots: PUBLIC_ROOTS
      EOF
      

      Ganti kode berikut:

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME : nama file YAML tempat resource konfigurasi autentikasi backend ditentukan
      • PROJECT_ID: ID project Google Cloud Anda
      • BACKEND_AUTH_CONFIG_NAME: nama resource konfigurasi autentikasi backend
      • TRUST_CONFIG_NAME: nama resource konfigurasi kepercayaan yang Anda buat sebelumnya

      regional

      cat << EOF > BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml
      name: projects/PROJECT_ID/locations/REGION/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
      trustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      wellKnownRoots: PUBLIC_ROOTS
      EOF
      

      Ganti kode berikut:

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME : nama file YAML tempat resource konfigurasi autentikasi backend ditentukan
      • PROJECT_ID: ID project Google Cloud Anda
      • REGION: nama region
      • BACKEND_AUTH_CONFIG_NAME: nama resource konfigurasi autentikasi backend
      • TRUST_CONFIG_NAME: nama resource konfigurasi kepercayaan yang Anda buat sebelumnya
    2. Untuk mengimpor konfigurasi autentikasi backend, gunakan perintah gcloud network-security backend-authentication-configs import.

      global

      gcloud network-security backend-authentication-configs import BACKEND_AUTH_CONFIG_NAME \
          --source=BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml \
          --location=global
      

      Ganti kode berikut:

      • BACKEND_AUTH_CONFIG_NAME: nama resource konfigurasi autentikasi backend

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME: nama file YAML tempat resource konfigurasi autentikasi backend ditentukan

      regional

      gcloud network-security backend-authentication-configs import BACKEND_AUTH_CONFIG_NAME \
          --source=BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml \
          --location=REGION
      

      Ganti kode berikut:

      • BACKEND_AUTH_CONFIG_NAME: nama resource konfigurasi autentikasi backend

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME: nama file YAML tempat resource konfigurasi autentikasi backend ditentukan

      • REGION: nama region

    Lampirkan resource konfigurasi autentikasi backend ke layanan backend load balancer

    Untuk melampirkan konfigurasi autentikasi backend (resource BackendAuthenticationConfig) ke layanan backend load balancer, selesaikan langkah-langkah berikut.

    Konsol

    1. Di konsol Google Cloud , buka halaman Load balancing.

      Buka Load balancing

    2. Di tab Backends, pilih layanan backend yang perlu Anda aktifkan TLS yang diautentikasi backend dan mTLS backend-nya.

    3. Klik Edit.

    4. Luaskan bagian Advanced configurations.

    5. Di bagian Backend authentication, centang kotak Enable.

    6. Opsional: Tentukan nama host SNI dan SAN yang diterima untuk memvalidasi sertifikat backend.

    7. Untuk melampirkan resource konfigurasi autentikasi backend ke layanan backend, di daftar Backend authentication config, pilih resource konfigurasi autentikasi backend.

    8. Klik Lanjutkan.

    9. Untuk memperbarui setelan layanan backend, klik Perbarui.

    gcloud

    1. Untuk mencantumkan semua resource layanan backend dalam project Anda, gunakan perintah gcloud compute backend-services list.

      gcloud compute backend-services list
      

      Catat nama layanan backend untuk melampirkan resource BackendAuthenticationConfig. Nama ini disebut sebagai BACKEND_SERVICE_NAME dalam langkah-langkah berikutnya.

    2. Untuk mengekspor konfigurasi layanan backend ke file, gunakan perintah gcloud compute backend-services export.

      global

      gcloud compute backend-services export BACKEND_SERVICE_NAME \
          --destination=BACKEND_SERVICE_FILENAME.yaml \
          --global
      

      Ganti kode berikut:

      • BACKEND_SERVICE_NAME: nama layanan backend
      • BACKEND_SERVICE_FILENAME: nama dan jalur ke file YAML tempat konfigurasi layanan backend diekspor

      regional

      gcloud compute backend-services export BACKEND_SERVICE_NAME \
          --destination=BACKEND_SERVICE_FILENAME.yaml \
          --region=REGION
      

      Ganti kode berikut:

      • BACKEND_SERVICE_NAME: nama layanan backend
      • BACKEND_SERVICE_FILENAME: nama dan jalur ke file YAML tempat konfigurasi layanan backend diekspor
      • REGION: nama region Google Cloud tempat layanan backend berada
    3. Perbarui atribut tlsSettings layanan backend, yang mengarahkannya ke resource konfigurasi autentikasi backend. Selain itu, Anda dapat mengonfigurasi nama host SNI dan SAN yang diterima di layanan backend untuk memvalidasi sertifikat backend.

      global

      Lampirkan resource konfigurasi autentikasi backend global ke layanan backend.

      Nilai SNI dan SAN dalam deklarasi YAML berikut hanya dimaksudkan sebagai contoh. Anda dapat menggantinya dengan nilai dunia nyata yang relevan dengan penyiapan Anda.

        cat << EOF >> BACKEND_SERVICE_FILENAME.yaml
        tlsSettings:
          authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
          sni: examplepetstore.com
          subjectAltNames:
          - dnsName: examplepetstore.com
          - dnsName: api.examplepetstore.com
        EOF
        

      Ganti kode berikut:

      • BACKEND_SERVICE_FILENAME: nama file YAML tempat konfigurasi layanan backend diekspor

      • PROJECT_ID: ID Google Cloud project Anda

      • BACKEND_AUTH_CONFIG_NAME: nama resource konfigurasi autentikasi backend

      regional

      Lampirkan resource konfigurasi autentikasi backend regional ke layanan backend.

      Nilai SNI dan SAN dalam deklarasi YAML berikut hanya dimaksudkan sebagai contoh. Anda dapat menggantinya dengan nilai dunia nyata yang relevan dengan penyiapan Anda.

        cat << EOF >> BACKEND_SERVICE_FILENAME.yaml
        tlsSettings:
          authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/REGION/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
          sni: examplepetstore.com
          subjectAltNames:
          - dnsName: examplepetstore.com
          - dnsName: api.examplepetstore.com
        EOF
        

      Ganti kode berikut:

      • BACKEND_SERVICE_FILENAME: nama file YAML tempat konfigurasi layanan backend diekspor

      • PROJECT_ID: ID Google Cloud project Anda

      • REGION: nama Google Cloud region tempat konfigurasi autentikasi backend dibuat

      • BACKEND_AUTH_CONFIG_NAME: nama resource konfigurasi autentikasi backend

    4. Untuk mengimpor konfigurasi layanan backend yang diperbarui dari file, gunakan perintah gcloud compute backend-services import.

      global

        gcloud compute backend-services import BACKEND_SERVICE_NAME \
            --source=BACKEND_SERVICE_FILENAME.yaml \
            --global
      

      Ganti kode berikut:

      • BACKEND_SERVICE_NAME: nama layanan backend
      • BACKEND_SERVICE_FILENAME: nama file YAML konfigurasi layanan backend

      regional

        gcloud compute backend-services import BACKEND_SERVICE_NAME \
            --source=BACKEND_SERVICE_FILENAME.yaml \
            --region=REGION
      

      Ganti kode berikut:

      • BACKEND_SERVICE_NAME: nama layanan backend
      • BACKEND_SERVICE_FILENAME: nama file YAML konfigurasi layanan backend
      • REGION: nama region Google Cloud tempat layanan backend berada

    Buat sertifikat server backend

    Bagian ini memberikan opsi konfigurasi tambahan untuk membuat sertifikat server (leaf) yang ditandatangani oleh sertifikat perantara, yang merupakan bagian dari konfigurasi kepercayaan. Hal ini memastikan bahwa rantai kepercayaan dapat dibuat dari sertifikat server kembali ke anchor kepercayaan.

    Jika Anda telah membuat resource konfigurasi kepercayaan yang berisi sertifikat perantara, lakukan hal berikut:

    1. Buat file konfigurasi untuk membuat CSR bagi sertifikat server.

      File konfigurasi berikut (server.config) berisi bagian [extension_requirements], yang menentukan ekstensi X.509 yang akan disertakan dalam CSR. Untuk mempelajari lebih lanjut persyaratan sertifikat server, lihat Persyaratan sertifikat.

      cat > server.config << EOF
      [req]
      default_bits              = 2048
      req_extensions            = extension_requirements
      distinguished_name        = dn_requirements
      prompt                    = no
      
      [extension_requirements]
      basicConstraints          = critical, CA:FALSE
      keyUsage                  = critical, nonRepudiation, digitalSignature, keyEncipherment
      extendedKeyUsage          = serverAuth
      subjectAltName            = @alt_names
      
      [alt_names]
      DNS.1 = examplepetstore.com
      DNS.2 = api.examplepetstore.com
      
      [dn_requirements]
      countryName               = US
      stateOrProvinceName       = California
      localityName              = San Francisco
      0.organizationName        = example
      organizationalUnitName    = test
      commonName                = examplepetstore.com
      emailAddress              = test@examplepetstore.com
      
      EOF
      
    2. Buat CSR (server.csr) untuk sertifikat server.

      openssl req -new \
          -sha256 -newkey rsa:2048 -nodes \
          -config server.config \
          -keyout server.key -out server.csr
      
    3. Tandatangani CSR untuk menerbitkan sertifikat server X.509 (server.cert). CSR ditandatangani oleh sertifikat perantara.

      openssl x509 -req \
          -CAkey int.key -CA int.cert \
          -days 365 \
          -extfile server.config \
          -extensions extension_requirements \
          -in server.csr -out server.cert
      

      Saat load balancer terhubung ke server backend, server backend menampilkan sertifikatnya (server.cert) untuk mengautentikasi dirinya ke load balancer, sehingga menyelesaikan proses autentikasi backend.

    Opsi konfigurasi SSL tambahan di server web Apache

    Bagian opsional ini akan memandu Anda melalui proses memperbarui opsi konfigurasi SSL di server Apache berdasarkan sertifikat server yang Anda buat sebelumnya.

    1. Salin kunci pribadi server (server.key) dan sertifikat server (server.cert) ke server web Apache.

          cat > server.key << EOF
          -----BEGIN PRIVATE KEY-----
          [...]
          -----END PRIVATE KEY-----
          EOF
      
          sudo cp ./server.key /etc/ssl/private/server.key
          

      Ganti [...] dengan kunci pribadi server yang dienkode PEM yang Anda buat sebelumnya.

          cat > server.cert << EOF
          -----BEGIN CERTIFICATE-----
          [...]
          -----END CERTIFICATE-----
          EOF
      
          sudo cp ./server.cert /etc/ssl/certs/server.cert
          

      Ganti [...] dengan sertifikat server berenkode PEM yang Anda buat sebelumnya.

    2. Perbarui konfigurasi SSL server web Apache.

      Perbarui konfigurasi SSL Apache untuk mengaktifkan traffic HTTPS menggunakan sertifikat SSL dan kunci pribadi yang ditentukan.

          sudo vi /etc/apache2/sites-available/default-ssl.conf
      
          ----
          SSLCertificateFile      /etc/ssl/certs/server.cert
          SSLCertificateKeyFile /etc/ssl/private/server.key
          ----
          
    3. Lakukan rehash pada sertifikat CA.

          sudo c_rehash /etc/ssl/certs/
          
    4. Mulai ulang server web Apache untuk menerapkan perubahan.

          sudo systemctl restart apache2.service
          

    Langkah berikutnya