Sertifikat TLS

Konfigurasikan sertifikat TLS eksternal untuk IBM Bob on-premises agar klien bob-ide dan bob-shell dapat terhubung dengan aman.

Bob mengekspos API-nya melalui HTTPS. Sebelum pengguna dapat terhubung menggunakan bob-ide atau bob-shell, sertifikat endpoint harus dipercaya oleh workstation klien.

Tips:

Gunakan sertifikat yang diterbitkan oleh certificate authority enterprise atau yang dipercaya publik jika memungkinkan. Ini menghilangkan kebutuhan untuk mendistribusikan sertifikat CA khusus Bob ke workstation developer.

Untuk kembali ke sertifikat self-signed default kapan saja, jalankan bobctl reset-route. Ini menghapus spec.externalCertificate dari repositori sertifikat Bob dan operator mengembalikan endpoint eksternal ke cert-manager.

Gunakan pendekatan ini ketika sertifikat tersedia dari PKI korporat atau certificate authority yang dipercaya publik.

Sebelum meminta atau menghasilkan sertifikat, identifikasi setiap hostname yang diekspos oleh Bob. Semua hostname harus disertakan sebagai Subject Alternative Names (SAN) dalam sertifikat.

Ambil hostname ingress

Jalankan perintah berikut untuk mencantumkan semua hostname ingress Bob:

oc get ingress -n <instance-namespace> \
  -o jsonpath='{range .items[*]}{range .spec.rules[*]}{.host}{"\n"}{end}{end}'

Catat hostname yang dikembalikan — hostname tersebut diperlukan saat memesan atau menghasilkan sertifikat.

Verifikasi persyaratan sertifikat

Pastikan sertifikat memenuhi persyaratan berikut sebelum diterapkan ke Bob:

  • Private key tidak terenkripsi.
  • Sertifikat berisi rantai sertifikat lengkap.
  • Semua hostname ingress Bob disertakan sebagai entri SAN.
  • Sertifikat dan key disediakan dalam format PEM.

Buat secret sertifikat

Buat Kubernetes secret yang berisi sertifikat dan private key:

oc create secret generic my-tls-secret \
  --from-file=tls.crt=tls.crt \
  --from-file=tls.key=tls.key \
  --from-file=ca.crt=ca.crt \
  -n <instance-namespace>

Untuk memperbarui secret yang sudah ada:

oc create secret generic my-tls-secret \
  --from-file=tls.crt=tls.crt \
  --from-file=tls.key=tls.key \
  --from-file=ca.crt=ca.crt \
  -n <instance-namespace> \
  --dry-run=client -o yaml | oc apply -f -

Terapkan sertifikat

Konfigurasikan Bob untuk menggunakan sertifikat:

./bobctl setup-route --tls-secret my-tls-secret
ParameterDeskripsi
--tls-secretMenentukan secret yang berisi sertifikat dan private key.
--no-waitMengembalikan kontrol segera tanpa menunggu rekonsiliasi.
--dry-runMemvalidasi konfigurasi tanpa menerapkan perubahan.

Verifikasi sertifikat

Verifikasi bahwa sertifikat yang diharapkan sedang disajikan:

echo | openssl s_client \
  -connect <hostname>:443 \
  -servername <hostname> 2>/dev/null \
  | openssl x509 -noout -issuer -subject -dates

Verifikasi bahwa:

  • Penerbit sudah benar.
  • Hostname ada dalam daftar SAN.
  • Tanggal validitas sertifikat sudah benar.

Gunakan prosedur ini untuk menghasilkan sertifikat yang ditandatangani oleh certificate authority privat atau internal dan mengonfigurasi Bob untuk menggunakannya untuk lalu lintas HTTPS eksternal.

Hasilkan sertifikat CA

Hasilkan private key dan sertifikat self-signed untuk certificate authority:

openssl genrsa -out ca.key 4096

openssl req -x509 -new -nodes \
  -key ca.key \
  -sha256 \
  -days 365 \
  -out ca.crt \
  -subj "/CN=<BOB_HOSTNAME> CA"

Ini membuat ca.key dan ca.crt.

Catatan:

Bob mengharapkan sertifikat CA diberi nama ca.crt saat disertakan dalam Kubernetes secret. Jika kamu menggunakan sertifikat CA yang sudah ada, ganti namanya menjadi ca.crt sebelum membuat secret.

Hasilkan private key server

Hasilkan private key yang tidak terenkripsi untuk sertifikat endpoint Bob:

openssl genrsa -out tls.key 4096

Jika private key dienkripsi dengan passphrase, hapus passphrase sebelum melanjutkan:

openssl rsa -in encrypted.key -out tls.key

Buat file konfigurasi SAN

Buat file bernama san.cnf dan ganti hostname placeholder dengan hostname ingress yang diambil sebelumnya:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[req_distinguished_name]
CN = <BOB_HOSTNAME_1>

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = <BOB_HOSTNAME_1>
DNS.2 = <BOB_HOSTNAME_2>
DNS.3 = <BOB_HOSTNAME_3>

Tambah atau hapus entri DNS.* sesuai kebutuhan agar semua hostname ingress Bob disertakan.

Hasilkan certificate signing request

openssl req \
  -new \
  -key tls.key \
  -out tls.csr \
  -config san.cnf

Tandatangani sertifikat

openssl x509 \
  -req \
  -in tls.csr \
  -CA ca.crt \
  -CAkey ca.key \
  -CAcreateserial \
  -out tls.crt \
  -days 365 \
  -extensions v3_req \
  -extfile san.cnf

Buat TLS secret

Untuk sertifikat yang diterbitkan oleh certificate authority privat atau korporat:

oc create secret generic my-tls-secret \
  --from-file=tls.crt=/path/to/tls.crt \
  --from-file=tls.key=/path/to/tls.key \
  --from-file=ca.crt=/path/to/ca.crt \
  -n <instance-namespace>

Untuk sertifikat yang dipercaya publik:

oc create secret tls my-tls-secret \
  --cert=/path/to/tls.crt \
  --key=/path/to/tls.key \
  -n <instance-namespace>

Terapkan sertifikat

Konfigurasikan Bob untuk menggunakan TLS secret:

./bobctl setup-route --tls-secret my-tls-secret

bobctl memvalidasi secret, memperbarui konfigurasi Bob, dan menunggu rekonsiliasi selesai.

ParameterDeskripsi
--tls-secret <secret>Menentukan secret yang berisi sertifikat TLS dan private key.
--no-waitMengembalikan kontrol segera tanpa menunggu rekonsiliasi selesai.
--dry-runMemvalidasi konfigurasi tanpa menerapkan perubahan.
Catatan:

Jika ca.crt tidak disertakan dalam secret, bobctl menampilkan peringatan. Ini adalah hal yang diharapkan saat sertifikat diterbitkan oleh certificate authority yang sudah dipercaya oleh workstation klien.

Verifikasi sertifikat

Verifikasi bahwa Bob menyajikan sertifikat yang diharapkan:

echo | openssl s_client \
  -connect <BOB_HOSTNAME_1>:443 \
  -servername <BOB_HOSTNAME_1> 2>/dev/null \
  | openssl x509 -noout -issuer -subject -dates

Verifikasi bahwa:

  • Penerbit sesuai dengan certificate authority yang diharapkan.
  • Sertifikat berisi entri hostname yang diharapkan.
  • Tanggal validitas sertifikat sudah benar.

Jika certificate authority penerbit tidak dipercaya oleh workstation developer, distribusikan sertifikat CA kepada pengguna sebelum mereka terhubung ke Bob menggunakan bob-ide atau bob-shell.

Jika tidak ada sertifikat eksternal yang dikonfigurasi, Bob menggunakan sertifikat self-signed yang dikelola oleh cert-manager. Dalam konfigurasi ini, pengguna harus mempercayai sertifikat CA Bob sebelum terhubung.

Tentukan konfigurasi sertifikat

Periksa apakah endpoint eksternal Bob menggunakan sertifikat self-signed:

oc get secret bob-external-tls -n <instance-namespace> \
  -o jsonpath='{.data.tls\.crt}' \
  | base64 -d \
  | openssl x509 -noout -issuer
  • Jika penerbit adalah CN=Bob Internal CA, cluster menggunakan sertifikat self-signed default. Lanjutkan ke langkah berikutnya.
  • Jika penerbit adalah certificate authority enterprise atau yang dipercaya publik, tidak diperlukan konfigurasi sertifikat di sisi klien. Lihat Manajemen pengguna.

Ekspor sertifikat CA

./bobctl get-ca-cert --output bob-ca.crt

Distribusikan sertifikat CA

Berikan bob-ca.crt yang diekspor kepada pengguna dan instruksikan mereka untuk menambahkannya ke trust store sistem operasi mereka. Pengguna dapat membuat koneksi HTTPS yang dipercaya setelah mengimpor sertifikat CA Bob.

Bagaimana topik ini?