Membuat template sertifikat

Halaman ini menjelaskan atribut template sertifikat dan menjelaskan cara membuat template sertifikat.

Ringkasan template sertifikat

Certificate Authority Service menyediakan template yang dapat digunakan kembali dan berparameter yang dapat Anda gunakan untuk skenario penerbitan sertifikat umum. Template sertifikat mewakili skema penerbitan sertifikat yang relatif statis dan terdefinisi dengan baik dalam suatu organisasi. Resource CertificateTemplate mencakup hal berikut.

  1. Ekspresi Common Expression Language (CEL) yang dievaluasi terhadap subjek dan SAN yang diminta di semua permintaan sertifikat yang menggunakan template tersebut. Untuk informasi selengkapnya tentang cara menggunakan CEL, lihat Menggunakan CEL.
  2. Daftar yang diizinkan yang menentukan apakah subjek atau nama alternatif subjek dapat disalin dari permintaan pengguna akhir ke sertifikat yang diterbitkan.
  3. Daftar opsional yang diizinkan yang menentukan ekstensi X.509, jika ada, yang dapat disalin dari permintaan pengguna akhir ke sertifikat yang diterbitkan.
  4. Kumpulan nilai ekstensi X.509 opsional yang ditambahkan ke semua sertifikat yang diterbitkan dan menggunakan template tersebut.

Template sertifikat pada dasarnya dapat menjadi kerangka kerja penerbitan sertifikat vertikal yang lengkap. Untuk detail selengkapnya, lihat definisi pesan CertificateTemplate selengkapnya.

Nilai yang telah ditentukan sebelumnya dalam template sertifikat

Nilai yang telah ditentukan di template sertifikat ditambahkan ke semua sertifikat yang menggunakan template sertifikat. Kebijakan ini memungkinkan pembuatan skenario penerbitan sertifikat umum, seperti mTLS atau penandatanganan kode. Nilainya mencakup hal berikut:

  • Penggunaan kunci: Menentukan penggunaan kunci dasar untuk sertifikat sesuai dengan RFC 5280 bagian 4.2.1.12.
  • Penggunaan kunci yang diperpanjang: Menentukan penggunaan kunci yang diperpanjang untuk sertifikat sesuai dengan RFC 5280 bagian 4.2.1.3.
  • Jika sertifikatnya adalah CA: Menentukan apakah sertifikat dapat menerbitkan sertifikat tambahan atau apakah sertifikat tersebut merupakan sertifikat entitas akhir.
  • Panjang jalur penerbit maksimum: Dalam kasus CA, ini menentukan jumlah maksimum CA yang dapat dirantai ke sertifikat CA ini. Jika panjang jalur penerbit maksimum ditetapkan ke 0, CA hanya dapat menerbitkan sertifikat entitas akhir. Jika disetel ke 1, rantai di bawah sertifikat CA ini hanya dapat menyertakan satu CA subordinat. Jika nilai tidak dideklarasikan, maka jumlah CA subordinat dalam rantai di bawah CA ini tidak akan dibatasi.
  • Server OCSP AIA: Mengacu pada server OCSP di ekstensi Akses Informasi Otoritas (AIA) sertifikat, seperti yang dijelaskan di RFC 5280 bagian 4.2.2.1.
  • Ekstensi X.509 tambahan: Menjelaskan ekstensi X.509 kustom.

Contoh kode berikut menyebutkan semua kolom yang telah ditentukan dalam template sertifikat:

keyUsage:
  baseKeyUsage:
    digitalSignature: true
    keyEncipherment: true
    contentCommitment: false
    dataEncipherment: false
    keyAgreement: false
    certSign: false
    crlSign: false
    encipherOnly: false
    decipherOnly: false
  extendedKeyUsage:
    serverAuth: true
    clientAuth: false
    codeSigning: false
    emailProtection: false
    timeStamping: false
    ocspSigning: false
caOptions:
  isCa: true
  maxIssuerPathLength: 1
policyIds:
- objectIdPath:
  - 1
  - 2
  - 3
additionalExtensions:
- objectId:
    objectIdPath:
    - 1
    - 2
    - 3
  critical: false
  value: "base64 encoded extension value"

Nilai yang tidak ditentukan dalam YAML akan dihilangkan atau ditetapkan secara default ke false.

Ekstensi berikut dihilangkan jika nilai tidak ditentukan:

  • keyUsage
  • policyIds
  • additionalExtensions
  • Kolom maxIssuerPathLength di ekstensi caOptions

Ekstensi berikut ditetapkan secara default ke false jika nilai tidak ditentukan:

  • Kolom isCa di ekstensi caOptions

Membuat template sertifikat

Untuk membuat template sertifikat, gunakan perintah gcloud berikut:

gcloud

gcloud privateca templates create TEMPLATE_ID \
  --copy-subject \
  --copy-sans \
  --identity-cel-expression <expr> \
  --predefined-values-file FILE_PATH \
  --copy-all-requested-extensions \
  --copy-extensions-by-oid <1.2.3.4,5.6.7.8> \
  --copy-known-extensions <ext1,ext2>

Ganti kode berikut:

  • TEMPLATE_ID: ID unik template sertifikat.
  • FILE_PATH: file YAML yang mendeskripsikan nilai X.509 yang ditetapkan oleh template sertifikat.

Tanda --copy-sans memungkinkan ekstensi Nama Alternatif Subjek (SAN) dari permintaan sertifikat untuk disalin ke sertifikat yang ditandatangani. Atau, Anda dapat menentukan --no-copy-sans untuk menghentikan SAN pemanggil yang ditentukan dari permintaan sertifikat.

Tanda --copy-subject memungkinkan Subjek dari permintaan sertifikat disalin ke dalam sertifikat yang ditandatangani. Atau, Anda dapat menentukan --no-copy-subject untuk melepaskan subjek yang ditentukan pemanggil dari permintaan sertifikat.

Flag --identity-cel-expression menggunakan ekspresi CEL yang dievaluasi terhadap Nama Alternatif Subjek dan Subjek sertifikat sebelum diterbitkan, dan menampilkan boolean yang menandakan apakah permintaan harus diizinkan. Untuk mengetahui informasi tentang cara menggunakan ekspresi Common Expression Language (CEL) untuk template sertifikat, lihat Menggunakan CEL untuk template sertifikat.

Flag --predefined-values-file menentukan jalur ke file YAML yang mendeskripsikan nilai X.509 standar yang ditetapkan oleh template ini. Ekstensi yang disediakan akan disalin ke setiap permintaan sertifikat yang menggunakan template ini, yang lebih diutamakan daripada ekstensi yang diizinkan dalam permintaan sertifikat. Jika Anda mengupdate bagian apa pun dari nilai X.509 yang telah ditentukan, update akan menggantikan seluruh kumpulan nilai X.509 yang telah ditentukan.

Jika flag --copy-all-requested-extensions disetel, semua ekstensi yang ditentukan dalam permintaan sertifikat akan disalin ke dalam sertifikat yang ditandatangani. Atau, flag --copy-extensions-by-oid dapat digunakan untuk menyalin OID tertentu dari permintaan sertifikat ke dalam sertifikat yang ditandatangani dan flag --copy-known-extensions dapat digunakan untuk menyalin ekstensi dari permintaan sertifikat ke dalam sertifikat yang ditandatangani. Harus berupa salah satu dari: base-key-usage, extended-key-usage, ca-options, policy-ids, aia-ocsp-servers.

Hapus tanda --copy-all-requested-extensions untuk mengabaikan semua ekstensi X.509 dalam permintaan sertifikat, tetapi tetap mempertahankan nilai yang telah ditentukan dalam template ini.

Membuat template sertifikat untuk skenario umum

Bagian ini menyediakan perintah gcloud guna membuat template sertifikat untuk kasus penggunaan umum.

Sertifikat TLS server DNS untuk domain apa pun

Untuk membuat template sertifikat guna menerbitkan sertifikat TLS server yang mengizinkan domain apa pun, gunakan petunjuk berikut:

  1. Buat file dengan nama leaf_server_tls_values.yaml dan tambahkan konfigurasi TLS server entitas akhir berikut ke file tersebut:

    leaf_server_tls_values.yaml

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
    caOptions:
      isCa: false
    
  2. Untuk hanya mengizinkan sertifikat dengan SAN jenis DNS, jalankan perintah gcloud berikut:

    gcloud

    gcloud privateca templates create server-tls \
      --predefined-values-file leaf_server_tls_values.yaml \
      --copy-sans --no-copy-subject \
      --identity-cel-expression "subject_alt_names.all(san, san.type == DNS)"
    

    Untuk mengetahui informasi selengkapnya tentang perintah gcloud privateca templates create, lihat gcloud privateca templates create.

Sertifikat TLS server DNS dengan hanya domain pengujian

Guna membuat template sertifikat untuk menerbitkan sertifikat TLS server dengan SAN DNS yang terbatas untuk domain pengujian, gunakan perintah gcloud berikut:

gcloud

gcloud privateca templates create server-tls \
  --predefined-values-file leaf_server_tls_values.yaml \
  --copy-sans --no-copy-subject \
  --identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.test.example.com'))"

Isi file leaf_server_tls_values.yaml harus sama dengan contoh sebelumnya.

Untuk mengetahui informasi selengkapnya tentang penggunaan ekspresi CEL guna memastikan nama DNS dimulai atau diakhiri dengan string tertentu, lihat ekspresi contoh CEL.

Sertifikat Workload Identity

Untuk membuat template sertifikat guna menerbitkan sertifikat TLS (mTLS) bersama, gunakan petunjuk berikut:

  1. Buat file dengan nama leaf_mtls_values.yaml dan tambahkan konfigurasi TLS bersama entity akhir berikut ke dalamnya.

    leaf_mtls_values.yaml

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
        clientAuth: true
    caOptions:
      isCa: false
    
  2. Untuk hanya mengizinkan sertifikat dengan SAN URI SPIFFE, gunakan perintah gcloud berikut:

    gcloud

    gcloud privateca templates create workload-spiffe \
      --predefined-values-file leaf_mtls_values.yaml \
      --copy-sans --no-copy-subject \
      --identity-cel-expression "subject_alt_names.all(san, san.type == URI && san.value.startsWith('spiffe://'))"
    

    Untuk mengetahui informasi selengkapnya tentang perintah gcloud privateca templates create, lihat gcloud privateca templates create.

Untuk mengetahui informasi selengkapnya tentang penggunaan ekspresi CEL guna memastikan nama DNS dimulai atau diakhiri dengan string tertentu, lihat ekspresi contoh CEL.

Memberikan akses ke template sertifikat

Anda dapat menggunakan template sertifikat jika memiliki peran CA Service Certificate Template User (roles/privateca.templateUser). Sebaiknya pembuat template sertifikat memberikan peran CA Service Certificate Template User kepada anggota di organisasi yang mungkin menggunakan template sertifikat tersebut.

Untuk memberikan peran CA Service Certificate Template User (roles/privateca.templateUser) kepada semua orang di domain example.com, gunakan perintah gcloud berikut:

gcloud

gcloud privateca templates add-iam-policy-binding TEMPLATE_ID \
  --member "domain:example.com" \
  --role "roles/privateca.templateUser"

Ganti kode berikut:

  • TEMPLATE_ID: ID unik template sertifikat.

Untuk mengetahui informasi selengkapnya tentang perintah gcloud privateca templates add-iam-policy-binding, lihat gcloud privateca templates add-iam-policy-binding.

Untuk mengetahui informasi selengkapnya tentang peran IAM untuk CA Service, dan izin yang terkait, lihat Kontrol akses dengan IAM.

Langkah selanjutnya