Da formato a los certificados para GKE Identity Service

En este documento, se explica cómo dar formato a los certificados cuando configuras GKE Identity Service. Esta guía puede ayudarte a evitar y solucionar problemas con los certificados de proveedor de identidad cuando usas el servicio.

Descripción general

GKE Identity Service es un servicio de autenticación que te permite acceder a tu clúster de GKE a través de proveedores de identidad como OIDC y LDAP. Cuando se establece una conexión TLS, GKE Identity Service valida el certificado del servidor del proveedor y verifica si el issuer del certificado del proveedor es uno de los certificados de la autoridad certificadora (AC) configurados.

Cadena certificateAuthorityData en ClientConfig

El certificado de la AC que se usa para verificar la identidad del proveedor está configurado en el campo certificateAuthorityData en ClientConfig, como se muestra en los siguientes ejemplos.

Ejemplo para LDAP

...
ldap:
  host: HOST_NAME
  certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
  connectionType: CONNECTION_TYPE
...

En el ejemplo anterior, CERTIFICATE_AUTHORITY_DATA contiene un certificado de la AC con formato PEM y codificado en base64 para el servidor LDAP. Incluye la string resultante en certificateAuthorityData como una certificateAuthorityData sola línea. Solo se debe proporcionar para conexiones de ldaps y startTLS.

Ejemplo de OIDC

...
oidc:
  certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
...

En el ejemplo anterior, CERTIFICATE_AUTHORITY_DATA contiene una cadena de certificado con formato PEM y codificada en base64 para el proveedor de identidad. Incluye la string resultante en certificateAuthorityData como una certificateAuthorityData sola línea.

Valor del certificado codificado en base64

Definida en RFC 4864, la codificación en base64 estándar usa los caracteres A a Z, a a z, 0 a 9, + y /. Los datos se rellenan con =.

Codifica el certificado de la AC para GKE Identity Service

Los certificados SSL tienen formatos como DER, PEM y PFX. Los archivos PFX suelen estar encriptados con una contraseña.

Cuando configuras GKE Identity Service con un proveedor de identidad, los certificados no deben estar protegidos con contraseña. Esto se debe a que no hay un flujo de trabajo disponible para especificar la contraseña para la desencriptación. Por este motivo, asegúrate de convertir tus certificados de otros formatos a archivos con codificación PEM a través de una herramienta de línea de comandos de openssl en cualquier sistema Linux o Unix. Si hay varios certificados, concatena los certificados y, luego, impórtalos como un solo archivo PEM.

Ejemplo del formato PEM

A continuación, se muestra un ejemplo de un certificado con codificación PEM:

-----BEGIN CERTIFICATE-----
MIICMzCCAZygAwIBAgIJALiPnVsvq8dsMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV
BAYTAlVTMQwwCgYDVQQIEwNmb28xDDAKBgNVBAcTA2ZvbzEMMAoGA1UEChMDZm9v
MQwwCgYDVQQLEwNmb28xDDAKBgNVBAMTA2ZvbzAeFw0xMzAzMTkxNTQwMTlaFw0x
ODAzMTgxNTQwMTlaMFMxCzAJBgNVBAYTAlVTMQwwCgYDVQQIEwNmb28xDDAKBgNV
BAcTA2ZvbzEMMAoGA1UEChMDZm9vMQwwCgYDVQQLEwNmb28xDDAKBgNVBAMTA2Zv
bzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzdGfxi9CNbMf1UUcvDQh7MYB
OveIHyc0E0KIbhjK5FkCBU4CiZrbfHagaW7ZEcN0tt3EvpbOMxxc/ZQU2WN/s/wP
xph0pSfsfFsTKM4RhTWD2v4fgk+xZiKd1p0+L4hTtpwnEw0uXRVd0ki6muwV5y/P
+5FHUeldq+pgTcgzuK8CAwEAAaMPMA0wCwYDVR0PBAQDAgLkMA0GCSqGSIb3DQEB
BQUAA4GBAJiDAAtY0mQQeuxWdzLRzXmjvdSuL9GoyT3BF/jSnpxz5/58dba8pWen
v3pj4P3w5DoOso0rzkZy2jEsEitlVM2mLSbQpMM+MUVQCQoiG6W9xuCFuxSrwPIS
pAqEAuV4DNoxQKKWmhVv+J0ptMWD25Pnpxeq5sXzghfJnslJlQND
-----END CERTIFICATE-----

Ten en cuenta los siguientes detalles en el ejemplo:

  • Los delimitadores de certificados comienzan con BEGIN CERTIFICATE y terminan con END CERTIFICATE.
  • La cantidad de guiones que se usan en los delimitadores es fija.
  • El valor del certificado usa la codificación estándar en base64 (RFC 4864) con saltos de línea (después de 64 caracteres).
  • Los saltos de línea (\n) no son visibles. No se debe escapar el carácter de línea nueva.

Especifica el valor del certificado en ClientConfig

Para especificar el valor del certificado en tu ClientConfig, haz lo siguiente:

  1. Determina el formato codificado con PEM para el certificado de la AC.
  2. Codifica en base64 el archivo PEM según RFC 4864. Asegúrate de que el resultado sea una sola cadena larga sin ningún salto de línea, como en el siguiente ejemplo de un archivo PEM codificado en base64:
    LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNNekNDQVp5Z0F3SUJBZ0lKQUxpUG5Wc3ZxOGRzTUEwR0NTcUdTSWIzRFFFQkJRVUFNRk14Q3pBSkJnTlYKQkFZVEFsVlRNUXd3Q2dZRFZRUUlFd05tYjI4eEREQUtCZ05WQkFjVEEyWnZiekVNTUFvR0ExVUVDaE1EWm05dgpNUXd3Q2dZRFZRUUxFd05tYjI4eEREQUtCZ05WQkFNVEEyWnZiekFlRncweE16QXpNVGt4TlRRd01UbGFGdzB4Ck9EQXpNVGd4TlRRd01UbGFNRk14Q3pBSkJnTlZCQVlUQWxWVE1Rd3dDZ1lEVlFRSUV3Tm1iMjh4RERBS0JnTlYKQkFjVEEyWnZiekVNTUFvR0ExVUVDaE1EWm05dk1Rd3dDZ1lEVlFRTEV3Tm1iMjh4RERBS0JnTlZCQU1UQTJadgpiekNCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBemRHZnhpOUNOYk1mMVVVY3ZEUWg3TVlCCk92ZUlIeWMwRTBLSWJoaks1RmtDQlU0Q2lacmJmSGFnYVc3WkVjTjB0dDNFdnBiT014eGMvWlFVMldOL3Mvd1AKeHBoMHBTZnNmRnNUS000UmhUV0QydjRmZ2sreFppS2QxcDArTDRoVHRwd25FdzB1WFJWZDBraTZtdXdWNXkvUAorNUZIVWVsZHErcGdUY2d6dUs4Q0F3RUFBYU1QTUEwd0N3WURWUjBQQkFRREFnTGtNQTBHQ1NxR1NJYjNEUUVCCkJRVUFBNEdCQUppREFBdFkwbVFRZXV4V2R6TFJ6WG1qdmRTdUw5R295VDNCRi9qU25weHo1LzU4ZGJhOHBXZW4KdjNwajRQM3c1RG9Pc28wcnprWnkyakVzRWl0bFZNMm1MU2JRcE1NK01VVlFDUW9pRzZXOXh1Q0Z1eFNyd1BJUwpwQXFFQXVWNEROb3hRS0tXbWhWditKMHB0TVdEMjVQbnB4ZXE1c1h6Z2hmSm5zbEpsUU5ECi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
    
  3. Proporciona este valor de certificado para el campo certificateAuthorityData en ClientConfig.

Certificados de la AC para certificados intermedios

Un certificado intermedio cumple un rol de “cadena de confianza” entre un certificado de entidad final y un certificado raíz. Este valor de certificado debe tener el formato de una cadena codificada en base64 cuando se usa en ClientConfig. Para crear una sola cadena, concatena los certificados completos con codificación PEM en una sola cadena y, luego, codifícala en base64.

Este es un ejemplo de una cadena de confianza contigua que comienza con el certificado raíz.

ServerCert -> IntermediateCA -> DeptCA -> RootCA

En este ejemplo,ServerCert es emitido por IntermediateCA, emitido porDeptCA que, a su vez, es emitido porRootCA.

Las cadenas de confianza parciales son compatibles con GKE Identity Service. Esto significa que puedes proporcionar cadenas solo con algunos de los certificados, como los siguientes:

IntermediateCA -> DeptCA -> RootCA

IntermediateCA -> DeptCA

ServerCert

Cuando GKE Identity Service solo se configura con una cadena parcial, verificará la identidad del servidor; para ello, intentará hacer coincidir los certificados en la cadena parcial con la identidad que presenta el servidor.

Las versiones anteriores de GKE Identity Service, como las versiones anteriores a Google Distributed Cloud 1.28.200, requieren una cadena de confianza contigua que comienza desde el certificado raíz para verificar el servidor. Ejemplos de cadenas parciales compatibles con versiones anteriores de GKE Identity Service:

ServerCert -> IntermediateCA -> DeptCA -> RootCA

IntermediateCA -> DeptCA -> RootCA

DeptCA -> RootCA

Si tienes problemas con la verificación de certificados y no sabes qué versión de GKE Identity Service usas, intenta agregar un certificado raíz a tu cadena de confianza si no tienes uno para ver si esta es la causa del problema.

Especifica la cadena de confianza de certificados en ClientConfig

Para especificar la cadena de confianza de certificados en tu ClientConfig, haz lo siguiente:

  1. Determina el formato con codificación PEM de los certificados de la CA que deseas incluir en la cadena de certificados.
  2. Concatena los archivos PEM en un solo archivo, de modo que el certificado raíz esté al final del archivo. La salida tiene el siguiente aspecto:

    -----BEGIN CERTIFICATE-----
    IntermediateCA
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    DeptCA
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    RootCA certificate
    -----END CERTIFICATE-----
    
  3. Codifica en base64 el archivo concatenado. Asegúrate de que el archivo contenga una sola línea de texto codificado en base64.

  4. Proporciona este valor de certificado para el campo certificateAuthorityData en ClientConfig.