Certificados TLS
Configura certificados TLS externos para IBM Bob on-premises para que los clientes bob-ide y bob-shell puedan conectarse de forma segura.
Bob expone sus APIs a través de HTTPS. Antes de que los usuarios puedan conectarse usando bob-ide o bob-shell, el certificado del endpoint debe ser de confianza en las estaciones de trabajo de los clientes.
Usa un certificado emitido por una autoridad de certificación empresarial o de confianza pública siempre que sea posible. Esto elimina la necesidad de distribuir certificados CA específicos de Bob a las estaciones de trabajo de los desarrolladores.
Para volver al certificado autofirmado predeterminado en cualquier momento, ejecuta bobctl reset-route. Esto elimina spec.externalCertificate del repositorio de certificados de Bob y el operador devuelve el endpoint externo a cert-manager.
Usa este enfoque cuando hay un certificado disponible de una PKI corporativa o una autoridad de certificación de confianza pública.
Antes de solicitar o generar un certificado, identifica cada hostname expuesto por Bob. Todos los hostnames deben incluirse como Nombres Alternativos de Sujeto (SANs) en el certificado.
Recuperar los hostnames de ingreso
Ejecuta el siguiente comando para listar todos los hostnames de ingreso de Bob:
oc get ingress -n <instance-namespace> \
-o jsonpath='{range .items[*]}{range .spec.rules[*]}{.host}{"\n"}{end}{end}'Registra los hostnames devueltos — son necesarios al solicitar o generar certificados.
Verificar los requisitos del certificado
Asegúrate de que el certificado cumple los siguientes requisitos antes de aplicarlo a Bob:
- La clave privada no está cifrada.
- El certificado contiene la cadena de certificados completa.
- Todos los hostnames de ingreso de Bob están incluidos como entradas SAN.
- El certificado y la clave se proporcionan en formato PEM.
Crear el secreto del certificado
Crea un secreto de Kubernetes que contenga el certificado y la clave privada:
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>Para actualizar un secreto existente:
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 -Aplicar el certificado
Configura Bob para que use el certificado:
./bobctl setup-route --tls-secret my-tls-secret| Parámetro | Descripción |
|---|---|
--tls-secret | Especifica el secreto que contiene el certificado y la clave privada. |
--no-wait | Retorna inmediatamente sin esperar a que se complete la reconciliación. |
--dry-run | Valida la configuración sin aplicar cambios. |
Verificar el certificado
Verifica que se está sirviendo el certificado esperado:
echo | openssl s_client \
-connect <hostname>:443 \
-servername <hostname> 2>/dev/null \
| openssl x509 -noout -issuer -subject -datesVerifica que:
- El emisor es correcto.
- El hostname está presente en la lista de SANs.
- Las fechas de validez del certificado son correctas.
Usa este procedimiento para generar un certificado firmado por una autoridad de certificación privada o interna y configurar Bob para que lo use para el tráfico HTTPS externo.
Generar un certificado CA
Genera una clave privada y un certificado autofirmado para la autoridad de certificación:
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"Esto crea ca.key y ca.crt.
Bob espera que el certificado CA se llame ca.crt cuando se incluye en el secreto de Kubernetes. Si estás usando un certificado CA existente, renómbralo a ca.crt antes de crear el secreto.
Generar una clave privada del servidor
Genera una clave privada no cifrada para el certificado del endpoint de Bob:
openssl genrsa -out tls.key 4096Si la clave privada está cifrada con una frase de contraseña, elimina la frase de contraseña antes de continuar:
openssl rsa -in encrypted.key -out tls.keyCrear un archivo de configuración SAN
Crea un archivo llamado san.cnf y reemplaza los hostnames de marcador de posición con los hostnames de ingreso recuperados anteriormente:
[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>Añade o elimina entradas DNS.* según sea necesario para que todos los hostnames de ingreso de Bob estén incluidos.
Generar una solicitud de firma de certificado
openssl req \
-new \
-key tls.key \
-out tls.csr \
-config san.cnfFirmar el certificado
openssl x509 \
-req \
-in tls.csr \
-CA ca.crt \
-CAkey ca.key \
-CAcreateserial \
-out tls.crt \
-days 365 \
-extensions v3_req \
-extfile san.cnfCrear el secreto TLS
Para certificados emitidos por una autoridad de certificación privada o corporativa:
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>Para certificados de confianza pública:
oc create secret tls my-tls-secret \
--cert=/path/to/tls.crt \
--key=/path/to/tls.key \
-n <instance-namespace>Aplicar el certificado
Configura Bob para que use el secreto TLS:
./bobctl setup-route --tls-secret my-tls-secretbobctl valida el secreto, actualiza la configuración de Bob y espera a que se complete la reconciliación.
| Parámetro | Descripción |
|---|---|
--tls-secret <secret> | Especifica el secreto que contiene el certificado TLS y la clave privada. |
--no-wait | Retorna inmediatamente sin esperar a que se complete la reconciliación. |
--dry-run | Valida la configuración sin aplicar cambios. |
Si ca.crt no está incluido en el secreto, bobctl muestra una advertencia. Esto es esperado cuando el certificado es emitido por una autoridad de certificación que ya es de confianza en las estaciones de trabajo de los clientes.
Verificar el certificado
Verifica que Bob está sirviendo el certificado esperado:
echo | openssl s_client \
-connect <BOB_HOSTNAME_1>:443 \
-servername <BOB_HOSTNAME_1> 2>/dev/null \
| openssl x509 -noout -issuer -subject -datesVerifica que:
- El emisor coincide con la autoridad de certificación esperada.
- El certificado contiene las entradas de hostname esperadas.
- Las fechas de validez del certificado son correctas.
Si la autoridad de certificación emisora no es de confianza en las estaciones de trabajo de los desarrolladores, distribuye el certificado CA a los usuarios antes de que se conecten a Bob usando bob-ide o bob-shell.
Si no se configura ningún certificado externo, Bob usa un certificado autofirmado gestionado por cert-manager. En esta configuración, los usuarios deben confiar en el certificado CA de Bob antes de conectarse.
Determinar la configuración del certificado
Comprueba si el endpoint externo de Bob está usando un certificado autofirmado:
oc get secret bob-external-tls -n <instance-namespace> \
-o jsonpath='{.data.tls\.crt}' \
| base64 -d \
| openssl x509 -noout -issuer- Si el emisor es
CN=Bob Internal CA, el clúster está usando el certificado autofirmado predeterminado. Continúa con el siguiente paso. - Si el emisor es una autoridad de certificación empresarial o de confianza pública, no se requiere configuración de certificado del lado del cliente. Consulta Gestión de usuarios.
Exportar el certificado CA
./bobctl get-ca-cert --output bob-ca.crtDistribuir el certificado CA
Proporciona el bob-ca.crt exportado a los usuarios e instrúyeles para que lo añadan a su almacén de confianza del sistema operativo. Los usuarios pueden establecer conexiones HTTPS de confianza después de importar el certificado CA de Bob.