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.
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| Parameter | Deskripsi |
|---|---|
--tls-secret | Menentukan secret yang berisi sertifikat dan private key. |
--no-wait | Mengembalikan kontrol segera tanpa menunggu rekonsiliasi. |
--dry-run | Memvalidasi 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 -datesVerifikasi 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.
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 4096Jika private key dienkripsi dengan passphrase, hapus passphrase sebelum melanjutkan:
openssl rsa -in encrypted.key -out tls.keyBuat 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.cnfTandatangani sertifikat
openssl x509 \
-req \
-in tls.csr \
-CA ca.crt \
-CAkey ca.key \
-CAcreateserial \
-out tls.crt \
-days 365 \
-extensions v3_req \
-extfile san.cnfBuat 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-secretbobctl memvalidasi secret, memperbarui konfigurasi Bob, dan menunggu rekonsiliasi selesai.
| Parameter | Deskripsi |
|---|---|
--tls-secret <secret> | Menentukan secret yang berisi sertifikat TLS dan private key. |
--no-wait | Mengembalikan kontrol segera tanpa menunggu rekonsiliasi selesai. |
--dry-run | Memvalidasi konfigurasi tanpa menerapkan perubahan. |
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 -datesVerifikasi 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.crtDistribusikan 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.