TLS sertifikaları

bob-ide ve bob-shell istemcilerinin güvenli bir şekilde bağlanabilmesi için şirket içi (on-premises) IBM Bob için harici TLS sertifikalarını yapılandırın.

Bob, API'lerini HTTPS üzerinden sunar. Kullanıcılar bob-ide veya bob-shell kullanarak bağlanmadan önce, endpoint sertifikası geliştirici iş istasyonları tarafından güvenilir kılınmalıdır.

İpucu:

Mümkün olduğunda kurumsal veya genel olarak güvenilen bir sertifika yetkilisi (CA) tarafından düzenlenmiş bir sertifika kullanın. Bu, geliştirici iş istasyonlarına Bob'a özel CA sertifikaları dağıtma ihtiyacını ortadan kaldırır.

İstediğiniz zaman varsayılan kendinden imzalı (self-signed) sertifikaya geri dönmek için bobctl reset-route komutunu çalıştırın. Bu işlem spec.externalCertificate alanını Bob sertifika deposundan kaldırır ve operator harici endpoint'i cert-managera geri döndürür.

Kurumsal bir PKI veya genel olarak güvenilen bir sertifika yetkilisinden alınmış bir sertifika mevcut olduğunda bu yaklaşımı kullanın.

Sertifika talep etmeden veya oluşturmadan önce, Bob tarafından sunulan tüm hostname'leri belirleyin. Tüm hostname'ler sertifikaya Subject Alternative Name (SAN) olarak dahil edilmelidir.

Ingress hostname'lerini alın

Tüm Bob ingress hostname'lerini listelemek için aşağıdaki komutu çalıştırın:

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

Döndürülen hostname'leri kaydedin — bunlar sertifika talep ederken veya oluştururken gereklidir.

Sertifika gereksinimlerini doğrulayın

Sertifikayı Bob'a uygulamadan önce aşağıdaki gereksinimleri karşıladığından emin olun:

  • Özel anahtar (private key) şifrelenmemiştir (unencrypted).
  • Sertifika, eksiksiz sertifika zincirini (certificate chain) içerir.
  • Tüm Bob ingress hostname'leri SAN girişleri olarak dahil edilmiştir.
  • Sertifika ve anahtar PEM formatında sağlanmıştır.

Sertifika secret'ını oluşturun

Sertifikayı ve özel anahtarı içeren bir Kubernetes secret'ı oluşturun:

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>

Mevcut bir secret'ı güncellemek için:

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 -

Sertifikayı uygulayın

Bob'u bu sertifikayı kullanacak şekilde yapılandırın:

./bobctl setup-route --tls-secret my-tls-secret
ParametreAçıklama
--tls-secretSertifikayı ve özel anahtarı içeren secret'ı belirtir.
--no-waitMutabakat (reconciliation) beklenmeden hemen döner.
--dry-runDeğişiklikleri uygulamadan yapılandırmayı doğrular.

Sertifikayı doğrulayın

Beklenen sertifikanın sunulduğunu doğrulayın:

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

Şunları doğrulayın:

  • Düzenleyici (issuer) doğrudur.
  • Hostname, SAN listesinde mevcuttur.
  • Sertifika geçerlilik tarihleri doğrudur.

Harici HTTPS trafiği için özel veya dahili bir sertifika yetkilisi (CA) tarafından imzalanmış bir sertifika oluşturmak ve Bob'u bunu kullanacak şekilde yapılandırmak için bu prosedürü kullanın.

Bir CA sertifikası oluşturun

Sertifika yetkilisi için bir özel anahtar (private key) ve kendinden imzalı (self-signed) sertifika oluşturun:

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"

Bu işlem ca.key ve ca.crt dosyalarını oluşturur.

Not:

Bob, Kubernetes secret'ına dahil edildiğinde CA sertifikasının adının ca.crt olmasını bekler. Mevcut bir CA sertifikası kullanıyorsanız, secret'ı oluşturmadan önce adını ca.crt olarak değiştirin.

Bir sunucu özel anahtarı oluşturun

Bob endpoint sertifikası için şifrelenmemiş bir özel anahtar oluşturun:

openssl genrsa -out tls.key 4096

Eğer özel anahtar bir parola (passphrase) ile şifrelenmişse, devam etmeden önce parolayı kaldırın:

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

Bir SAN yapılandırma dosyası oluşturun

san.cnf adında bir dosya oluşturun ve yer tutucu (placeholder) hostname'leri daha önce aldığınız ingress hostname'leri ile değiştirin:

[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>

Tüm Bob ingress hostname'lerinin dahil edilmesi için gerektiği kadar DNS.* girişi ekleyin veya kaldırın.

Bir sertifika imzalama isteği oluşturun

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

Sertifikayı imzalayın

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'ını oluşturun

Özel veya kurumsal bir sertifika yetkilisi tarafından düzenlenen sertifikalar için:

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>

Genel olarak güvenilen sertifikalar için:

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

Sertifikayı uygulayın

Bob'u bu TLS secret'ını kullanacak şekilde yapılandırın:

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

bobctl secret'ı doğrular, Bob yapılandırmasını günceller ve mutabakatın (reconciliation) tamamlanmasını bekler.

ParametreAçıklama
--tls-secret <secret>TLS sertifikasını ve özel anahtarı içeren secret'ı belirtir.
--no-waitMutabakatın tamamlanmasını beklemeden hemen döner.
--dry-runDeğişiklikleri uygulamadan yapılandırmayı doğrular.
Not:

Eğer secret'a ca.crt dahil edilmemişse, bobctl bir uyarı görüntüler. Sertifika, geliştirici iş istasyonları tarafından halihazırda güvenilen bir sertifika yetkilisi tarafından düzenlendiğinde bu beklenen bir durumdur.

Sertifikayı doğrulayın

Bob'un beklenen sertifikayı sunduğunu doğrulayın:

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

Şunları doğrulayın:

  • Düzenleyici (issuer), beklenen sertifika yetkilisiyle eşleşir.
  • Sertifika, beklenen hostname girişlerini içerir.
  • Sertifika geçerlilik tarihleri doğrudur.

Düzenleyen sertifika yetkilisine geliştirici iş istasyonları tarafından güvenilmiyorsa, kullanıcılar bob-ide veya bob-shell kullanarak Bob'a bağlanmadan önce CA sertifikasını kullanıcılara dağıtın.

Eğer harici bir sertifika yapılandırılmamışsa, Bob, cert-manager tarafından yönetilen kendinden imzalı (self-signed) bir sertifika kullanır. Bu yapılandırmada, kullanıcılar bağlanmadan önce Bob CA sertifikasına güvenmelidir.

Sertifika yapılandırmasını belirleyin

Bob harici endpoint'inin kendinden imzalı bir sertifika kullanıp kullanmadığını kontrol edin:

oc get secret bob-external-tls -n <instance-namespace> \
  -o jsonpath='{.data.tls\.crt}' \
  | base64 -d \
  | openssl x509 -noout -issuer
  • Eğer düzenleyici (issuer) CN=Bob Internal CA ise, küme varsayılan kendinden imzalı sertifikayı kullanıyordur. Bir sonraki adımla devam edin.
  • Eğer düzenleyici kurumsal veya genel olarak güvenilen bir sertifika yetkilisi ise, istemci tarafında herhangi bir sertifika yapılandırmasına gerek yoktur. Bkz. Kullanıcı yönetimi.

CA sertifikasını dışa aktarın

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

CA sertifikasını dağıtın

Dışa aktarılan bob-ca.crt dosyasını kullanıcılara sağlayın ve bunu işletim sistemi güven depolarına (trust store) eklemelerini isteyin. Kullanıcılar, Bob CA sertifikasını içe aktardıktan sonra güvenli HTTPS bağlantıları kurabilirler.

Bu konu nasıl?