TLS 憑證
為 IBM Bob 本地版設定外部 TLS 憑證,以便 bob-ide 和 bob-shell 用戶端可以安全連線。
Bob 透過 HTTPS 公開其 API。在使用者使用 bob-ide 或 bob-shell 連線之前,端點憑證必須被用戶端工作站信任。
盡可能使用由企業或公開受信任的憑證授權單位頒發的憑證。這消除了向開發者工作站散佈 Bob 專用 CA 憑證的需要。
要隨時還原為預設的自簽章憑證,請執行 bobctl reset-route。這會從 Bob 憑證儲存庫中移除 spec.externalCertificate,Operator 會將外部端點歸還給 cert-manager。
當憑證可從企業 PKI 或公開受信任的憑證授權單位取得時使用此方法。
在要求或產生憑證之前,確認 Bob 公開的每個主機名稱。所有主機名稱必須作為主體替代名稱(SAN)包含在憑證中。
取得入口主機名稱
執行以下指令列出所有 Bob 入口主機名稱:
oc get ingress -n <instance-namespace> \
-o jsonpath='{range .items[*]}{range .spec.rules[*]}{.host}{"\n"}{end}{end}'記錄傳回的主機名稱——在訂購或產生憑證時需要用到它們。
建立憑證 Secret
建立包含憑證和私密金鑰的 Kubernetes Secret:
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>更新現有 Secret:
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 -套用憑證
設定 Bob 使用該憑證:
./bobctl setup-route --tls-secret my-tls-secret| 參數 | 描述 |
|---|---|
--tls-secret | 指定包含憑證和私密金鑰的 Secret。 |
--no-wait | 立即傳回而不等待協調完成。 |
--dry-run | 在不套用變更的情況下驗證設定。 |
驗證憑證
驗證預期的憑證正在被提供:
echo | openssl s_client \
-connect <hostname>:443 \
-servername <hostname> 2>/dev/null \
| openssl x509 -noout -issuer -subject -dates驗證:
- 頒發者正確。
- 主機名稱存在於 SAN 清單中。
- 憑證有效期日期正確。
使用此程序產生由私有或內部憑證授權單位簽署的憑證,並設定 Bob 將其用於外部 HTTPS 流量。
產生 CA 憑證
為憑證授權單位產生私密金鑰和自簽章憑證:
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"這會建立 ca.key 和 ca.crt。
當 CA 憑證包含在 Kubernetes Secret 中時,Bob 期望其命名為 ca.crt。如果你使用現有的 CA 憑證,請在建立 Secret 之前將其重新命名為 ca.crt。
產生伺服器私密金鑰
為 Bob 端點憑證產生未加密的私密金鑰:
openssl genrsa -out tls.key 4096如果私密金鑰使用複雜密碼加密,請在繼續之前移除複雜密碼:
openssl rsa -in encrypted.key -out tls.key建立 SAN 設定檔
建立名為 san.cnf 的檔案,並將預留位置主機名稱替換為先前取得的入口主機名稱:
[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>根據需要新增或移除 DNS.* 項目,確保包含所有 Bob 入口主機名稱。
產生憑證簽署要求
openssl req \
-new \
-key tls.key \
-out tls.csr \
-config san.cnf簽署憑證
openssl x509 \
-req \
-in tls.csr \
-CA ca.crt \
-CAkey ca.key \
-CAcreateserial \
-out tls.crt \
-days 365 \
-extensions v3_req \
-extfile san.cnf建立 TLS Secret
對於由私有或企業憑證授權單位頒發的憑證:
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>對於公開受信任的憑證:
oc create secret tls my-tls-secret \
--cert=/path/to/tls.crt \
--key=/path/to/tls.key \
-n <instance-namespace>套用憑證
設定 Bob 使用 TLS Secret:
./bobctl setup-route --tls-secret my-tls-secretbobctl 驗證 Secret,更新 Bob 設定,並等待協調完成。
| 參數 | 描述 |
|---|---|
--tls-secret <secret> | 指定包含 TLS 憑證和私密金鑰的 Secret。 |
--no-wait | 立即傳回而不等待協調完成。 |
--dry-run | 在不套用變更的情況下驗證設定。 |
如果 Secret 中不包含 ca.crt,bobctl 會顯示警告。當憑證由用戶端工作站已信任的憑證授權單位頒發時,這是預期的行為。
驗證憑證
驗證 Bob 正在提供預期的憑證:
echo | openssl s_client \
-connect <BOB_HOSTNAME_1>:443 \
-servername <BOB_HOSTNAME_1> 2>/dev/null \
| openssl x509 -noout -issuer -subject -dates驗證:
- 頒發者與預期的憑證授權單位相符。
- 憑證包含預期的主機名稱項目。
- 憑證有效期日期正確。
如果頒發憑證的授權單位不受開發者工作站信任,請在使用者使用 bob-ide 或 bob-shell 連線到 Bob 之前向其散佈 CA 憑證。
如果未設定外部憑證,Bob 使用由 cert-manager 管理的自簽章憑證。在此設定中,使用者必須在連線之前信任 Bob CA 憑證。
確定憑證設定
檢查 Bob 外部端點是否使用自簽章憑證:
oc get secret bob-external-tls -n <instance-namespace> \
-o jsonpath='{.data.tls\.crt}' \
| base64 -d \
| openssl x509 -noout -issuer- 如果頒發者為
CN=Bob Internal CA,則叢集正在使用預設的自簽章憑證。繼續執行下一步。 - 如果頒發者是企業或公開受信任的憑證授權單位,則不需要用戶端憑證設定。請參閱 使用者管理。
匯出 CA 憑證
./bobctl get-ca-cert --output bob-ca.crt散佈 CA 憑證
將匯出的 bob-ca.crt 提供給使用者,並指導他們將其新增到作業系統的信任存放區。使用者匯入 Bob CA 憑證後即可建立受信任的 HTTPS 連線。