Biasanya pada komunikasi HTTPS, autentikasi hanya berfungsi dengan satu cara: klien memverifikasi identitas server.
Untuk aplikasi yang mengharuskan load balancer untuk mengautentikasi identitas klien yang terhubung ke aplikasi tersebut, gunakan TLS bersama (mTLS).
Dengan mTLS, load balancer meminta klien untuk mengirimkan sertifikat untuk mengautentikasi dirinya sendiri selama handshake TLS dengan load balancer. Anda dapat mengonfigurasi penyimpanan kepercayaan yang digunakan load balancer untuk memvalidasi rantai kepercayaan sertifikat klien.
Load Balancer Aplikasi berikut mendukung mTLS:
- Load Balancer Aplikasi eksternal global
- Load Balancer Aplikasi Klasik
- Load Balancer Aplikasi eksternal regional (Pratinjau)
- Load Balancer Aplikasi internal regional (Pratinjau)
- Load Balancer Aplikasi internal lintas region
Arsitektur
Resource berikut diperlukan agar load balancer mendukung deployment autentikasi mTLS:
Resource kebijakan TLS server (ServerTLSPolicy). Memungkinkan Anda menentukan mode TLS sisi server dan resource
TrustConfig
yang akan digunakan saat memvalidasi sertifikat klien. Kebijakan TLS server mendukung autentikasi mTLS. Kebijakan TLS server dapat ditambahkan ke resource proxy HTTPS target.Resource
TrustConfig
. Resource Certificate Manager.TrustConfig
berisi resource single trust store yang digunakan untuk memvalidasi sertifikat klien. Untuk mengetahui informasi selengkapnya, lihat Mengelola konfigurasi kepercayaan.Anda dapat mengupload sertifikat yang diizinkan ke
TrustConfig
. Sertifikat yang diizinkan selalu dianggap valid selama sertifikat dapat diurai, bukti kepemilikan kunci pribadi dibuat, dan batasan di kolom SAN sertifikat terpenuhi. Sertifikat yang habis masa berlakunya juga dianggap valid jika diizinkan.Trust store. Berisi sertifikat trust anchor dan intermediate certificate authority (CA) yang digunakan untuk memvalidasi rantai sertifikat klien. CA digunakan untuk menerbitkan sertifikat tepercaya bagi klien. CA diidentifikasi oleh root certificate trust anchor load balancer atau sertifikat CA perantara.
Anda dapat mengupload jenis sertifikat klien berikut ke trust store:
- Sertifikat yang diterbitkan oleh CA pihak ketiga pilihan Anda.
- Sertifikat yang diterbitkan oleh CA pribadi dalam kontrol Anda, seperti yang dijelaskan dalam Menyiapkan TLS bersama dengan CA pribadi.
- Sertifikat yang ditandatangani, seperti yang dijelaskan dalam Menyiapkan TLS bersama dengan sertifikat yang disediakan pengguna.
Gambar berikut menampilkan komponen mTLS:
global
Diagram berikut menunjukkan komponen deployment Load Balancer Aplikasi eksternal. Arsitektur ini juga berlaku untuk Load Balancer Aplikasi internal lintas region, yang merupakan Load Balancer Aplikasi internal yang menggunakan komponen global.
regional
Diagram berikut menunjukkan komponen deployment Load Balancer Aplikasi internal regional. Arsitektur ini juga berlaku untuk Load Balancer Aplikasi eksternal regional, yang merupakan Load Balancer Aplikasi eksternal yang menggunakan komponen regional.
Untuk mengetahui informasi selengkapnya tentang komponen deployment Load Balancer Aplikasi, lihat bagian berikut:
- Arsitektur (Load Balancer Aplikasi eksternal)
- Arsitektur dan resource (Load Balancer Aplikasi internal)
Fitur
Fitur yang didukung oleh mTLS untuk load balancer memungkinkan Anda melakukan hal berikut:
Memverifikasi bukti kepemilikan kunci pribadi sertifikat yang diberikan oleh klien.
Validasi sertifikat klien dalam salah satu dari dua mode berikut:
- Menolak permintaan jika kami tidak dapat memvalidasi rantai sertifikat klien terhadap penyimpanan trust.
- Teruskan semua permintaan ke backend meskipun tidak memberikan sertifikat klien.
Lakukan validasi sertifikat klien terhadap anchor IKP yang diupload. Mendukung penambahan beberapa anchor IKP secara terpisah untuk memfasilitasi migrasi tanpa periode nonaktif dari IKP lama ke IKP baru.
Memberikan intermediate certificate tambahan yang akan digunakan untuk membuat jalur validasi terhadap anchor IKP yang ditentukan. Sertifikat perantara memungkinkan Anda menggunakan mTLS dengan klien yang tidak meneruskan rantai sertifikat lengkap.
Buat dan teruskan sidik jari sertifikat ke backend sebagai header permintaan kustom.
Teruskan kolom yang dipilih yang diekstrak dari sertifikat ke backend menggunakan header permintaan kustom.
Teruskan hasil validasi dan error validasi ke backend dengan menggunakan header permintaan kustom.
Untuk deskripsi yang lebih mendetail tentang proses validasi, lihat bagian Langkah-langkah validasi sertifikat klien nanti di halaman ini.
Mode validasi klien MTLS
Jika klien memberikan sertifikat yang tidak valid atau tidak ada sertifikat ke
load balancer, clientValidationMode
akan menentukan cara penanganan koneksi klien.
Nilai clientValidationMode
adalah sebagai berikut:
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
mengizinkan koneksi dari klien meskipun validasi rantai sertifikat sertifikat klien gagal atau tidak ada sertifikat klien yang diberikan. Bukti kepemilikan kunci pribadi selalu diperiksa ketika sertifikat klien diberikan.Anda dapat menggunakan variabel header kustom dengan mode ini untuk menunjukkan kepada backend apakah klien memberikan sertifikat, apakah validasi sertifikat berhasil, dan informasi lain yang diekstrak dari sertifikat.
REJECT_INVALID
menolak koneksi jika klien tidak memberikan sertifikat atau jika validasi sertifikat gagal.
Anda dapat melihat log untuk validasi sertifikat klien mTLS saat logging diaktifkan di layanan backend.
Nilai header kustom yang diteruskan ke backend
Tabel berikut menampilkan semua nilai variabel
header kustom TLS bersama
yang selalu diteruskan ke backend (jenis permintaan "Pass request to backend"). Header kustom diteruskan ke backend
saat clientValidationMode
ditetapkan ke ALLOW_INVALID_OR_MISSING_CLIENT_CERT
atau sertifikat klien lulus validasi sertifikat.
Status sertifikat klien | clientValidationMode | Header kustom |
---|---|---|
Rantai sertifikat klien terlalu panjang (lebih dari 10 intermediate certificate disertakan dengan sertifikat klien). |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Ukuran kunci RSA atau sertifikat perantara tidak valid. Tidak ada validasi yang dilakukan. Kunci RSA dapat berukuran 2048 hingga 4096 bit. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Klien atau sertifikat perantara menggunakan kurva eliptis yang tidak didukung. Tidak ada validasi yang dilakukan. Kurva eliptis yang valid adalah P-256 dan P-384. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Klien atau sertifikat perantara menggunakan algoritma non-RSA non-ECDSA. Tidak ada validasi yang dilakukan. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
IKP yang akan digunakan untuk validasi memiliki lebih dari sepuluh sertifikat perantara yang memiliki Info Kunci Publik Subjek dan Subjek yang sama. Tidak ada validasi yang dilakukan. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Sertifikat perantara yang disediakan untuk validasi memiliki lebih dari 10 batasan nama. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Sertifikat klien atau penerbitnya tidak memiliki
|
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Batas waktu akan terlampaui saat mencoba memvalidasi rantai sertifikat. | ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
client_cert_sha256_fingerprint: <cert hash>
|
Batas kedalaman atau iterasi tercapai saat mencoba memvalidasi rantai sertifikat. Kedalaman maksimum untuk rantai sertifikat adalah sepuluh, termasuk sertifikat root dan klien. Iterasi maksimumnya adalah 100 (sertifikat yang diperiksa untuk memvalidasi rantai sertifikat klien). |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Anda telah mengonfigurasi mTLS tanpa menyiapkan
resource Tidak ada validasi yang dapat dilakukan, tetapi hash sertifikat diteruskan ke backend. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Tidak ada sertifikat klien. | ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Sertifikat klien gagal divalidasi terhadap
resource TrustConfig .
|
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Sertifikat klien lulus validasi pemverifikasi sertifikat. | Tidak berlaku |
client_cert_error: <empty>
|
Mencatat error untuk koneksi yang ditutup
Error berikut menyebabkan koneksi klien ditutup jika
clientValidationMode
ditetapkan ke
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
atau REJECT_INVALID
.
Untuk mengetahui informasi selengkapnya, lihat Pesan kegagalan HTTP statusDetails.
Error ini dicatat dalam log ke Cloud Logging dan dijelaskan dalam tabel berikut.
Status sertifikat klien | Permintaan | Kesalahan yang dicatat |
---|---|---|
Sertifikat klien menggagalkan kecocokan tanda tangan selama handshake. | Menghentikan handshake SSL | Tidak ada |
Layanan tidak dapat menjalankan validasi rantai sertifikat. | Putuskan koneksi |
client_cert_validation_unavailable
|
Terjadi error internal saat memvalidasi rantai sertifikat. | Putuskan koneksi |
client_cert_validation_internal_error
|
TrustConfig yang cocok tidak ditemukan.
|
Putuskan koneksi |
client_cert_trust_config_not_found
|
Payload sertifikat klien (termasuk intermediate certificate) terlalu besar (lebih dari 16 KB). | Putuskan koneksi |
client_cert_exceeded_size_limit
|
Error yang dicatat dengan validasi REJECT_INVALID
Error berikut mengakibatkan koneksi tertutup (jenis permintaan
"Hentikan koneksi") saat clientValidationMode
ditetapkan ke REJECT_INVALID
. Untuk mengetahui informasi selengkapnya, lihat pesan kegagalan HTTP statusDetails.
Error ini dicatat dalam log ke Cloud Logging dan dijelaskan dalam tabel berikut.
Status sertifikat klien | Kesalahan yang dicatat |
---|---|
Rantai sertifikat klien terlalu panjang (lebih dari 10 sertifikat perantara disertakan dengan sertifikat klien). |
client_cert_chain_exceeded_limit
|
Ukuran kunci RSA atau sertifikat perantara tidak valid. Tidak ada validasi yang dilakukan. Kunci RSA dapat berukuran 2048 hingga 4096 bit. |
client_cert_invalid_rsa_key_size
|
Klien atau sertifikat perantara menggunakan kurva eliptis yang tidak didukung. Tidak ada validasi yang dilakukan. Kurva yang valid adalah P-256 dan P-384. |
client_cert_unsupported_elliptic_curve_key
|
Klien atau sertifikat perantara menggunakan algoritma non-RSA atau non-ECDSA. Tidak ada validasi yang dilakukan. |
client_cert_unsupported_key_algorithm
|
IKP yang akan digunakan untuk validasi memiliki lebih dari sepuluh sertifikat perantara yang memiliki Info Kunci Publik Subjek dan Subjek yang sama. Tidak ada validasi yang dilakukan. |
client_cert_pki_too_large
|
Sertifikat perantara yang disediakan untuk validasi memiliki lebih dari 10 batasan nama. |
|
Sertifikat klien atau penerbitnya tidak memiliki
|
|
Batas waktu akan terlampaui saat mencoba memvalidasi rantai sertifikat. |
client_cert_validation_timed_out
|
Batas kedalaman atau iterasi tercapai saat mencoba memvalidasi rantai sertifikat. Kedalaman maksimum untuk rantai sertifikat adalah sepuluh, termasuk sertifikat root dan klien. Jumlah maksimum iterasi adalah 100 (sertifikat yang diperiksa untuk memvalidasi rantai sertifikat klien). |
client_cert_validation_search_limit_exceeded
|
Anda telah mengonfigurasi mTLS tanpa menyiapkan resource TrustConfig .
|
client_cert_validation_not_performed
|
Klien tidak memberikan sertifikat yang diminta selama handshake. |
client_cert_not_provided
|
Sertifikat klien gagal divalidasi dengan
resource TrustConfig .
|
client_cert_validation_failed
|
Langkah-langkah validasi sertifikat klien
Saat memvalidasi sertifikat klien, load balancer melakukan langkah-langkah berikut:
- Load balancer memverifikasi tanda tangan klien untuk membuktikan bahwa klien memiliki kunci pribadi sertifikat klien. Jika langkah ini gagal, load balancer akan selalu menggagalkan handshake TLS, meskipun konfigurasi Anda memungkinkan sertifikat klien yang tidak valid atau hilang, dan tidak ada informasi yang dicatat dalam log.
- Jika konfigurasi menyertakan
TrustAnchor
, load balancer akan memverifikasi rantai kepercayaan antara sertifikat klien danTrustAnchor
yang dikonfigurasi. Secara khusus, load balancer memverifikasi hal berikut:- Klien, intermediate, dan root certificate mematuhi persyaratan sertifikat.
- Kolom subjek di sertifikat induk cocok dengan kolom masalah di sertifikat turunan.
- ID Kunci Subjek (SKID) dari sertifikat induk cocok dengan ID Kunci Otoritas (AKID) dalam sertifikat turunan.
- SAN sertifikat turunan tidak melanggar
kolom
NameConstraints
di sertifikat induk.
- Jika verifikasi rantai kepercayaan berhasil, permintaan akan diteruskan ke backend dengan header kustom mTLS yang dikonfigurasi untuk endpoint.
- Jika verifikasi rantai kepercayaan gagal:
- Jika
ClientValidationMode
ditetapkan keREJECT_INVALID
, load balancer akan menghentikan koneksi dan mencatat alasan ke Cloud Logging. - Jika
ClientValidationMode
disetel keALLOW_INVALID_OR_MISSING_CLIENT_CERTIFICATE
, load balancer tetap akan meneruskan permintaan ke backend. Anda dapat menggunakan header permintaan kustom untuk menunjukkan kepada backend bahwa validasi gagal, dan alasan kegagalannya. Untuk Load Balancer Aplikasi internal lintas region, Load Balancer Aplikasi eksternal regional, atau Load Balancer Aplikasi internal regional, selain header permintaan kustom, Anda dapat mengonfigurasi kolom opsional mTLS untuk memeriksa alasan kegagalan.
- Jika
Persyaratan sertifikat
- Sertifikat harus menggunakan cipher RSA atau ECDSA.
- Untuk sertifikat klien (leaf):
- Ekstensi Basic Constraints
tidak boleh berisi
CA=true
. - Ekstensi Extended Key Usage
harus berisi
clientAuth
. - Ekstensi Extended Key Usage tidak boleh berisi kolom
codeSigning
,timeStamping
, atauOCSPSigning
. - Sertifikat harus masih berlaku.
- Sertifikat klien tidak boleh berupa sertifikat yang ditandatangani sendiri.
- Ekstensi Basic Constraints
tidak boleh berisi
- Untuk root certificate dan intermediate certificate:
- Ekstensi Basic Constraints
harus berisi
CA=true
. - Ekstensi Key Usage harus ditetapkan ke
keyCertSign
. - Ekstensi Extended Key Usage harus berisi kolom
clientAuth
. Hal ini diperlukan untuk sertifikat yang menerbitkan sertifikat klien. - Sertifikat harus masih berlaku.
- Ekstensi Basic Constraints
harus berisi
Batasan
Load balancer tidak melakukan pemeriksaan pembatalan pada sertifikat klien.
Load Balancer Aplikasi memungkinkan Anda mengupload konfigurasi kepercayaan dengan satu penyimpanan trust yang berisi maksimal 100 trust anchor dan 100 intermediate certificate serta 500 sertifikat yang diizinkan. Semua intermediate certificate tidak boleh memiliki lebih dari tiga sertifikat yang memiliki info Kunci Publik Subjek dan Subjek yang sama. Untuk informasi lebih lanjut, lihat Kuota dan batas.
Kedalaman maksimum untuk rantai sertifikat adalah sepuluh, termasuk sertifikat root dan klien. Frekuensi maksimum sertifikat perantara dapat dievaluasi saat mencoba membuat rantai kepercayaan adalah 100. Untuk mengetahui informasi selengkapnya, lihat Kuota dan batas.
Kunci sertifikat yang diupload dan diteruskan dari klien dibatasi untuk hal berikut:
- Kunci RSA dapat berukuran 2048 hingga 4096 bit. Untuk mengetahui informasi selengkapnya, lihat Kuota dan batas.
- Kunci ECDSA dapat menggunakan kurva P-256 atau P-384.
Rantai sertifikat yang diterima yang diterima dari klien dibatasi hingga 16 KB dan 10 sertifikat. Untuk mengetahui informasi selengkapnya, lihat Kuota dan batas.
Root certificate yang digunakan untuk validasi tidak boleh berisi lebih dari 10 batasan nama. Untuk mengetahui informasi selengkapnya, lihat Kuota dan batas.
Sertifikat klien yang ditandatangani sendiri selalu dianggap tidak valid oleh load balancer.
Langkah selanjutnya
Menyiapkan TLS bersama menggunakan sertifikat yang diberikan pengguna
Menyiapkan TLS bersama untuk Load Balancer Aplikasi eksternal global
Menyiapkan TLS bersama untuk Load Balancer Aplikasi internal
Menyiapkan TLS bersama untuk Load Balancer Aplikasi eksternal regional