Da formato a los certificados para la autenticación

En este documento, se explica cómo dar formato a los certificados para la autenticación de proveedores de identidad externos. Esta guía puede ayudarte a evitar y solucionar problemas con los certificados de proveedor de identidad cuando usas el servicio. Este documento solo se aplica a los tipos de clústeres compatibles.

Descripción general

Puedes configurar la autenticación desde proveedores de identidad como OIDC y LDAP en tus clústeres. Cuando se establece una conexión TLS, el clúster 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 CA

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

Cuando configuras 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.

Se admiten cadenas de confianza parciales. Esto significa que puedes proporcionar cadenas solo con algunos de los certificados, como los siguientes:

IntermediateCA -> DeptCA -> RootCA

IntermediateCA -> DeptCA

ServerCert

Cuando solo se configura una cadena parcial, el clúster verificará la identidad del servidor intentando hacer coincidir los certificados de la cadena parcial con la identidad que presenta el servidor.

Las versiones anteriores, 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:

ServerCert -> IntermediateCA -> DeptCA -> RootCA

IntermediateCA -> DeptCA -> RootCA

DeptCA -> RootCA

Si tienes problemas con la verificación de certificados y no sabes qué versión 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.