Certificats TLS
Configurez des certificats TLS externes pour IBM Bob on-premises afin que les clients bob-ide et bob-shell puissent se connecter en toute sécurité.
Bob expose ses API via HTTPS. Avant que les utilisateurs puissent se connecter à l'aide de bob-ide ou bob-shell, le certificat de l'endpoint doit être approuvé par les postes de travail client.
Utilisez un certificat émis par une autorité de certification d'entreprise ou publiquement approuvée dans la mesure du possible. Cela élimine le besoin de distribuer des certificats CA spécifiques à Bob aux postes de travail des développeurs.
Pour revenir au certificat autosigné par défaut à tout moment, exécutez bobctl reset-route. Cela supprime spec.externalCertificate du référentiel de certificats Bob et l'opérateur retourne l'endpoint externe à cert-manager.
Utilisez cette approche lorsqu'un certificat est disponible auprès d'une PKI d'entreprise ou d'une autorité de certification publiquement approuvée.
Avant de demander ou de générer un certificat, identifiez chaque nom d'hôte exposé par Bob. Tous les noms d'hôte doivent être inclus en tant que Subject Alternative Names (SANs) dans le certificat.
Récupérer les noms d'hôte d'entrée
Exécutez la commande suivante pour lister tous les noms d'hôte d'entrée Bob :
oc get ingress -n <instance-namespace> \
-o jsonpath='{range .items[*]}{range .spec.rules[*]}{.host}{"\n"}{end}{end}'Notez les noms d'hôte retournés — ils sont requis lors de la commande ou de la génération de certificats.
Vérifier les exigences du certificat
Assurez-vous que le certificat satisfait aux exigences suivantes avant de l'appliquer à Bob :
- La clé privée est non chiffrée.
- Le certificat contient la chaîne de certificats complète.
- Tous les noms d'hôte d'entrée Bob sont inclus en tant qu'entrées SAN.
- Le certificat et la clé sont fournis au format PEM.
Créer le secret du certificat
Créez un secret Kubernetes contenant le certificat et la clé privée :
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>Pour mettre à jour un secret existant :
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 -Appliquer le certificat
Configurez Bob pour utiliser le certificat :
./bobctl setup-route --tls-secret my-tls-secret| Paramètre | Description |
|---|---|
--tls-secret | Spécifie le secret qui contient le certificat et la clé privée. |
--no-wait | Retourne immédiatement sans attendre la réconciliation. |
--dry-run | Valide la configuration sans appliquer les changements. |
Vérifier le certificat
Vérifiez que le certificat attendu est servi :
echo | openssl s_client \
-connect <hostname>:443 \
-servername <hostname> 2>/dev/null \
| openssl x509 -noout -issuer -subject -datesVérifiez que :
- L'émetteur est correct.
- Le nom d'hôte est présent dans la liste SAN.
- Les dates de validité du certificat sont correctes.
Utilisez cette procédure pour générer un certificat signé par une autorité de certification privée ou interne et configurer Bob pour l'utiliser pour le trafic HTTPS externe.
Générer un certificat CA
Générez une clé privée et un certificat autosigné pour l'autorité de certification :
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"Cela crée ca.key et ca.crt.
Bob s'attend à ce que le certificat CA soit nommé ca.crt lorsqu'il est inclus dans le secret Kubernetes. Si vous utilisez un certificat CA existant, renommez-le en ca.crt avant de créer le secret.
Générer une clé privée de serveur
Générez une clé privée non chiffrée pour le certificat de l'endpoint Bob :
openssl genrsa -out tls.key 4096Si la clé privée est chiffrée avec une phrase secrète, supprimez la phrase secrète avant de continuer :
openssl rsa -in encrypted.key -out tls.keyCréer un fichier de configuration SAN
Créez un fichier nommé san.cnf et remplacez les noms d'hôte d'espace réservé par les noms d'hôte d'entrée récupérés précédemment :
[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>Ajoutez ou supprimez des entrées DNS.* selon les besoins afin que tous les noms d'hôte d'entrée Bob soient inclus.
Générer une demande de signature de certificat
openssl req \
-new \
-key tls.key \
-out tls.csr \
-config san.cnfSigner le certificat
openssl x509 \
-req \
-in tls.csr \
-CA ca.crt \
-CAkey ca.key \
-CAcreateserial \
-out tls.crt \
-days 365 \
-extensions v3_req \
-extfile san.cnfCréer le secret TLS
Pour les certificats émis par une autorité de certification privée ou d'entreprise :
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>Pour les certificats publiquement approuvés :
oc create secret tls my-tls-secret \
--cert=/path/to/tls.crt \
--key=/path/to/tls.key \
-n <instance-namespace>Appliquer le certificat
Configurez Bob pour utiliser le secret TLS :
./bobctl setup-route --tls-secret my-tls-secretbobctl valide le secret, met à jour la configuration Bob et attend la fin de la réconciliation.
| Paramètre | Description |
|---|---|
--tls-secret <secret> | Spécifie le secret qui contient le certificat TLS et la clé privée. |
--no-wait | Retourne immédiatement sans attendre la fin de la réconciliation. |
--dry-run | Valide la configuration sans appliquer les changements. |
Si ca.crt n'est pas inclus dans le secret, bobctl affiche un avertissement. C'est attendu lorsque le certificat est émis par une autorité de certification déjà approuvée par les postes de travail client.
Vérifier le certificat
Vérifiez que Bob sert le certificat attendu :
echo | openssl s_client \
-connect <BOB_HOSTNAME_1>:443 \
-servername <BOB_HOSTNAME_1> 2>/dev/null \
| openssl x509 -noout -issuer -subject -datesVérifiez que :
- L'émetteur correspond à l'autorité de certification attendue.
- Le certificat contient les entrées de nom d'hôte attendues.
- Les dates de validité du certificat sont correctes.
Si l'autorité de certification émettrice n'est pas approuvée par les postes de travail des développeurs, distribuez le certificat CA aux utilisateurs avant qu'ils se connectent à Bob en utilisant bob-ide ou bob-shell.
Si aucun certificat externe n'est configuré, Bob utilise un certificat autosigné géré par cert-manager. Dans cette configuration, les utilisateurs doivent approuver le certificat CA de Bob avant de se connecter.
Déterminer la configuration du certificat
Vérifiez si l'endpoint externe Bob utilise un certificat autosigné :
oc get secret bob-external-tls -n <instance-namespace> \
-o jsonpath='{.data.tls\.crt}' \
| base64 -d \
| openssl x509 -noout -issuer- Si l'émetteur est
CN=Bob Internal CA, le cluster utilise le certificat autosigné par défaut. Passez à l'étape suivante. - Si l'émetteur est une autorité de certification d'entreprise ou publiquement approuvée, aucune configuration de certificat côté client n'est requise. Voir Gestion des utilisateurs.
Exporter le certificat CA
./bobctl get-ca-cert --output bob-ca.crtDistribuer le certificat CA
Fournissez le bob-ca.crt exporté aux utilisateurs et demandez-leur de l'ajouter au magasin de confiance de leur système d'exploitation. Les utilisateurs peuvent établir des connexions HTTPS de confiance après avoir importé le certificat CA de Bob.