Halaman ini memberikan petunjuk untuk menyiapkan mTLS backend menggunakan sertifikat yang dikelola sendiri untuk Load Balancer Aplikasi eksternal global.
Langkah-langkah untuk mengonfigurasi mTLS backend mirip dengan TLS yang diautentikasi backend, kecuali Anda juga perlu membuat sertifikat untuk load balancer. Sertifikat ini, yang juga dikenal sebagai sertifikat klien, dilampirkan ke resource Konfigurasi Otentikasi Backend. Load balancer menggunakan sertifikat klien ini untuk mengautentikasi dirinya sendiri ke backend.
Untuk mengonfigurasi mTLS backend, selesaikan langkah-langkah di bagian berikut:
- Buat resource konfigurasi kepercayaan yang terdiri dari sertifikat root dan perantara.
- Buat sertifikat klien dan upload ke Certificate Manager.
- Buat resource Konfigurasi Otentikasi Backend yang mereferensikan konfigurasi kepercayaan dan sertifikat klien.
- Lampirkan resource Konfigurasi Autentikasi Backend ke layanan backend load balancer.
Sebelum memulai
- Tinjau Ringkasan TLS yang diautentikasi backend dan mTLS backend.
- Tinjau Mengelola konfigurasi tepercaya.
Jika ingin mengikuti petunjuk dalam panduan ini menggunakan Google Cloud CLI, Anda harus menginstalnya. Anda dapat menemukan perintah terkait load balancing di referensi API dan gcloud CLI.
Jika Anda belum pernah menjalankan gcloud CLI sebelumnya, jalankan perintah
gcloud init
terlebih dahulu untuk melakukan autentikasi.Aktifkan API berikut: Compute Engine API, Certificate Manager API, Network Security, dan Network Services API. Untuk mempelajari lebih lanjut, lihat Mengaktifkan API.
Konfigurasi Load Balancer Aplikasi eksternal global dengan salah satu backend yang didukung berikut:
- Backend grup instance VM
- NEG dengan konektivitas hybrid
- NEG Zona
Izin
Bagian ini mencantumkan izin yang diperlukan untuk mengonfigurasi mTLS backend.Operasi | Izin |
---|---|
Membuat konfigurasi kepercayaan | certificatemanager.trustconfigs.create pada project
Google Cloud target |
Buat sertifikat klien | certificatemanager.certs.create pada project
Google Cloud target |
Buat resource Konfigurasi Autentikasi Backend |
certificatemanager.certs.use pada sertifikat targetcertificatemanager.trustconfigs.use pada konfigurasi
kepercayaan targetnetworksecurity.backendauthenticationconfigs.create di
project Google Cloud target |
Lampirkan resource Konfigurasi Autentikasi Backend ke layanan backend load balancer |
compute.backendservice.update pada layanan backend
targetnetworksecurity.backendauthenticationconfigs.use pada
resource Konfigurasi Autentikasi Backend target |
Ringkasan penyiapan
Bagian berikutnya menjelaskan langkah-langkah untuk mengonfigurasi mTLS backend berdasarkan arsitektur yang ditunjukkan dalam diagram berikut:
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.
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
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
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
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 resource 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
Di konsol Google Cloud , buka halaman Certificate Manager.
Di tab Trust Configs, klik Add Trust Config.
Masukkan nama untuk konfigurasi.
Untuk Location, pilih Global. Lokasi menunjukkan tempat penyimpanan resource konfigurasi kepercayaan. Untuk Load Balancer Aplikasi eksternal global, Anda perlu membuat resource konfigurasi kepercayaan global.
Di bagian Trust store, klik Add trust anchor dan upload file sertifikat yang dienkode PEM, atau salin konten sertifikat.
Klik Tambahkan.
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.
Klik Tambahkan untuk menambahkan CA perantara.
Untuk menambahkan sertifikat yang Anda tambahkan ke daftar yang diizinkan, klik Tambahkan.
Klik Buat.
Pastikan resource konfigurasi kepercayaan baru muncul dalam daftar konfigurasi.
gcloud
Buat file YAML konfigurasi kepercayaan (
trust_config.yaml
) yang menentukan parameter konfigurasi kepercayaan. Contoh resource konfigurasi kepercayaan ini berisi trust store dengan trust anchor 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.Untuk mengimpor file YAML konfigurasi kepercayaan, gunakan perintah
gcloud certificate-manager trust-configs import
:Untuk Load Balancer Aplikasi eksternal global, tentukan
global
sebagai lokasi tempat resource konfigurasi tepercaya disimpan.gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=global
Ganti kode berikut:
TRUST_CONFIG_NAME
: nama resource konfigurasi kepercayaan
Buat sertifikat klien
Dalam mTLS backend, load balancer bertindak sebagai klien dan backend bertindak sebagai server.
Untuk mengaktifkan mTLS backend, load balancer perlu membuktikan identitasnya ke backend. Autentikasi ini dilakukan menggunakan sertifikat klien yang diberikan load balancer ke backend. Server backend perlu memvalidasi sertifikat klien menggunakan rantai kepercayaan miliknya sendiri.
Saat terhubung ke server backend, load balancer akan menyetel Server Name Indication (SNI) ke nama host yang ditentukan dalam konfigurasi TLS. Server backend memilih sertifikat SSL/TLS yang sesuai berdasarkan nilai SNI ini. Load balancer mengharapkan nilai SNI cocok dengan Nama Alternatif Subjek (SAN) yang tercantum dalam sertifikat server backend.
Sertifikat klien dapat berupa sertifikat terkelola dari CA Pribadi melalui Certificate Authority Service atau sertifikat PKI pribadi yang dikelola sendiri. Dalam contoh ini, sertifikat klien diterbitkan menggunakan sertifikat yang dikelola sendiri. Bagian ini menggunakan library OpenSSL untuk membuat sertifikat CA root dan sertifikat klien.
Untuk membuat sertifikat klien, selesaikan langkah-langkah berikut:
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 otoritas sertifikat (CA). AtributextendedKeyUsage
ditetapkan keclientAuth
Untuk mempelajari lebih lanjut persyaratan untuk 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=clientAuth EOF
Buat sertifikat CA 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
Buat file konfigurasi untuk membuat CSR bagi sertifikat klien.
File konfigurasi berikut (
client.config
) berisi bagian[extension_requirements]
, yang menentukan ekstensi X.509 yang akan disertakan dalam CSR. Untuk mempelajari lebih lanjut persyaratan sertifikat klien, lihat Persyaratan sertifikat.cat > client.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 = clientAuth [dn_requirements] countryName = US stateOrProvinceName = California localityName = San Francisco 0.organizationName = example organizationalUnitName = test commonName = test.example.com emailAddress = test@example.com EOF
Buat CSR (
client.csr
) untuk sertifikat klien.openssl req -new \ -config client.config \ -keyout client.key -out client.csr
Buat sertifikat klien (
client.cert
) dari CSR. CSR ditandatangani oleh sertifikat CA root untuk menerbitkan sertifikat klien X.509.openssl x509 -req \ -CAkey root.key -CA root.cert \ -days 365 \ -extfile client.config \ -extensions extension_requirements \ -in client.csr -out client.cert
Mengupload sertifikat klien ke Certificate Manager
Untuk mengupload sertifikat klien ke Certificate Manager, selesaikan langkah-langkah berikut:
Konsol
Di konsol Google Cloud , buka halaman Certificate Manager.
Di tab Sertifikat, klik Tambahkan Sertifikat.
Masukkan nama untuk sertifikat.
Nama ini harus unik untuk project.
Opsional: Masukkan deskripsi untuk sertifikat. Deskripsi membantu Anda mengidentifikasi sertifikat tertentu nanti.
Untuk Location, pilih Global.
Untuk Scope, pilih Client Authentication.
Untuk Certificate type, pilih Create Self-managed certificate.
Untuk kolom Certificate, upload file sertifikat berenkode PEM, atau salin dan tempel konten sertifikat berenkode PEM.
Untuk kolom Private key certificate, upload kunci pribadi berenkode PEM yang tidak dilindungi dengan frasa sandi, atau salin dan tempel konten kunci pribadi berenkode PEM.
Tentukan label yang akan dikaitkan dengan sertifikat. Anda dapat menambahkan lebih dari satu label, jika diperlukan. Untuk menambahkan label, klik tombol
Tambahkan label, lalu tentukankey
danvalue
untuk label Anda.Klik Buat. Pastikan sertifikat baru muncul dalam daftar sertifikat.
gcloud
Untuk mengupload sertifikat klien ke Pengelola Sertifikat, gunakan perintah
gcloud certificate-manager certificates create
. Cakupan sertifikat ini adalahclient-auth
, yang menunjukkan bahwa sertifikat ini digunakan sebagai sertifikat klien dalam mTLS backend.gcloud certificate-manager certificates create CLIENT_ CERTIFICATE_NAME \ --certificate-file=client.cert \ --private-key-file=client.key \ --scope=client-auth \ --global
Ganti kode berikut:
CLIENT_CERTIFICATE_NAME
: nama resource sertifikat klien. Sertifikat klien dengan cakupanclient-auth
ini digunakan oleh resource Konfigurasi Otentikasi Backend.
Buat resource Konfigurasi Autentikasi Backend
Untuk membuat resource Konfigurasi Autentikasi Backend (BackendAuthenticationConfig
), selesaikan langkah-langkah berikut.
Konsol
- Di konsol Google Cloud , buka halaman Authentication Configuration.
- Di tab Backend Authentication, klik Create.
- Masukkan nama untuk resource Konfigurasi Autentikasi Backend.
- Pilih resource sertifikat klien yang Anda buat sebelumnya.
- Opsional: Pilih root tepercaya publik.
- Pilih resource konfigurasi kepercayaan yang Anda buat sebelumnya.
- Klik Buat.
Pastikan resource Konfigurasi Autentikasi Backend ditampilkan.
gcloud
Buat file YAML yang secara deklaratif menentukan berbagai atribut dari resource Konfigurasi Autentikasi Backend.
Lampirkan sertifikat klien ke resource Konfigurasi Autentikasi Backend untuk mengaktifkan mTLS backend.
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 clientCertificate: projects/PROJECT_ID/locations/global/certificates/CLIENT_ CERTIFICATE_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 AndaBACKEND_AUTH_CONFIG_NAME
: nama resource Konfigurasi Autentikasi BackendTRUST_CONFIG_NAME
: nama resource konfigurasi kepercayaan yang Anda buat sebelumnya.CLIENT_CERTIFICATE_NAME
: nama resource sertifikat klien yang Anda buat sebelumnya.
Untuk mengimpor resource Konfigurasi Autentikasi Backend, gunakan perintah
gcloud network-security backend-authentication-configs import
: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 BackendBACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME
: nama file YAML tempat resource Konfigurasi Autentikasi Backend ditentukan.
Lampirkan resource Konfigurasi Autentikasi Backend ke layanan backend load balancer
Untuk melampirkan resource Konfigurasi Autentikasi Backend (BackendAuthenticationConfig
)
ke layanan backend load balancer, selesaikan langkah-langkah
berikut.
Konsol
Di konsol Google Cloud , buka halaman Load balancing.
Di tab Backends, pilih layanan backend yang perlu Anda aktifkan TLS yang diautentikasi backend dan mTLS backend-nya.
Klik
Edit.Luaskan bagian Advanced configurations.
Di bagian Backend authentication, centang kotak Enable.
Opsional: Tentukan nama host SNI dan SAN yang diterima untuk memvalidasi sertifikat backend.
Untuk melampirkan resource Konfigurasi Autentikasi Backend ke layanan backend, di daftar Konfigurasi Autentikasi Backend, pilih resource Konfigurasi Autentikasi Backend.
Klik Lanjutkan.
Untuk memperbarui setelan layanan backend, klik Perbarui.
gcloud
Untuk mencantumkan semua resource layanan backend di 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 sebagaiBACKEND_SERVICE_NAME
dalam langkah-langkah berikut.Untuk mengekspor konfigurasi layanan backend ke file, gunakan perintah
gcloud beta compute backend-services export
.gcloud beta compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_FILENAME.yaml \ --global
Ganti kode berikut:
BACKEND_SERVICE_NAME
: nama layanan backendBACKEND_SERVICE_FILENAME
: nama dan jalur ke file YAML tempat konfigurasi layanan backend diekspor
Perbarui atribut
tlsSettings
layanan backend, dengan mengarahkannya ke resource Konfigurasi Autentikasi Backend. Selain itu, Anda dapat mengonfigurasi nama host SNI dan SAN yang diterima pada layanan backend untuk memvalidasi sertifikat backend.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
Nilai SNI dan SAN dalam deklarasi YAML sebelumnya hanya dimaksudkan sebagai contoh. Anda dapat menggantinya dengan nilai dunia nyata yang relevan dengan penyiapan Anda.
Ganti kode berikut:
BACKEND_SERVICE_FILENAME
: nama file YAML tempat konfigurasi layanan backend dieksporPROJECT_ID
: ID Google Cloud project AndaBACKEND_AUTH_CONFIG_NAME
: nama resource Konfigurasi Autentikasi Backend
Untuk mengimpor konfigurasi layanan backend yang diperbarui dari file, gunakan perintah
gcloud beta compute backend-services import
.gcloud beta compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_FILENAME.yaml \ --global
Ganti kode berikut:
BACKEND_SERVICE_NAME
: nama layanan backendBACKEND_SERVICE_FILENAME
: nama file YAML konfigurasi layanan backend
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 trust anchor.
Jika Anda sudah membuat resource konfigurasi kepercayaan yang berisi sertifikat perantara, lakukan hal berikut:
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
Buat CSR (
server.csr
) untuk sertifikat server.openssl req -new \ -sha256 -newkey rsa:2048 -nodes \ -config server.config \ -keyout server.key -out server.csr
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 memandu Anda melalui proses untuk memperbarui opsi konfigurasi SSL di server Apache berdasarkan sertifikat klien dan server yang Anda buat sebelumnya.-
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 berenkode 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. -
Upload sertifikat klien ke konfigurasi kepercayaan server untuk memvalidasi sertifikat klien.
cat > client.cert << EOF -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- EOF sudo cp ./client.cert /etc/ssl/certs/client.cert
Ganti [...] dengan sertifikat klien berenkode PEM yang Anda buat sebelumnya.
-
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 ----
Perbarui konfigurasi SSL Apache untuk mewajibkan autentikasi sertifikat klien dan tentukan sertifikat CA untuk validasi.
sudo vi /etc/apache2/sites-available/default-ssl.conf ---- SSLVerifyClient require SSLVerifyDepth 5 SSLCACertificateFile /etc/ssl/certs/client.cert ----
-
Lakukan rehash pada sertifikat CA.
sudo c_rehash /etc/ssl/certs/
-
Mulai ulang server web Apache untuk menerapkan perubahan.
sudo systemctl restart apache2.service