Mettre en forme les certificats pour GKE Identity Service

Ce document explique comment mettre en forme les certificats lors de la configuration de GKE Identity Service. Ces conseils peuvent vous aider à éviter et à résoudre les problèmes liés aux certificats du fournisseur d'identité lors de l'utilisation du service.

Présentation

GKE Identity Service est un service d'authentification qui vous permet de vous connecter à votre clusters GKE via des fournisseurs d'identité tels qu'OIDC et LDAP. Lors de l'établissement d'une connexion TLS, GKE Identity Service valide le certificat de serveur du fournisseur et vérifie si le issuer du certificat du fournisseur est l'un des certificats d'autorité de certification (CA) configurés.

Chaîne certificateAuthorityData dans ClientConfig

Le certificat CA utilisé pour vérifier l'identité du fournisseur est configuré dans le champ certificateAuthorityData du ClientConfig, comme illustré dans les exemples suivants.

Exemple pour LDAP

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

CERTIFICATE_AUTHORITY_DATA contient un certificat CA encodé en base64 au format PEM pour le serveur LDAP. Incluez la chaîne obtenue dans certificateAuthorityData en tant que ligne unique. Ces éléments ne doivent être fournis que pour les connexions ldaps et startTLS.

Exemple pour OIDC

...
oidc:
  certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
...

CERTIFICATE_AUTHORITY_DATA contient une chaîne de certificat encodée en base64 au format PEM pour le fournisseur d'identité. Incluez la chaîne obtenue dans certificateAuthorityData en tant que ligne unique.

Valeur du certificat encodé en base64

Défini dans le document RFC 4864, l'encodage en base64 standard utilise les caractères A à Z, a à z, 0 à 9, + et /. Les données sont remplies à l'aide de =.

Encoder le certificat CA pour GKE Identity Service

Les certificats SSL utilisent des formats tels que DER, PEM et PFX. Les fichiers PFX sont généralement chiffrés à l'aide d'un mot de passe.

Lorsque vous configurez GKE Identity Service avec un fournisseur d'identité, les certificats ne doivent pas être protégés par un mot de passe. Ceci est dû au fait qu'il n'existe aucun workflow disponible permettant de spécifier le mot de passe pour le déchiffrement. Par conséquent, veillez à convertir vos certificats utilisant d'autres formats en fichiers encodés au format PEM à l'aide de l'outil de ligne de commande openssl sur n'importe quel système Linux ou Unix. S'il existe plusieurs certificats, concaténez-les et importez-les dans un seul fichier PEM.

Exemple de format PEM

Voici un exemple de certificat encodé au format 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-----

Notez les détails suivants dans l'exemple :

  • Les délimiteurs de certificats commencent par BEGIN CERTIFICATE et se terminent par END CERTIFICATE.
  • Le nombre de traits d'union utilisés dans les délimiteurs est fixe.
  • La valeur du certificat utilise l'encodage en base64 standard (RFC 4864) avec des sauts de ligne (après 64 caractères).
  • Les sauts de ligne (\n) ne sont pas visibles. N'échappez pas le caractère de nouvelle ligne.

Spécifier la valeur du certificat dans ClientConfig

Pour spécifier la valeur du certificat dans votre ClientConfig, procédez comme suit :

  1. Déterminez le format encodé en PEM pour le certificat CA.
  2. Encodez le fichier PEM en base64 conformément à la RFC 4864. Assurez-vous que la sortie est une longue chaîne sans saut de ligne, comme dans l'exemple suivant de fichier PEM encodé en base64 :
    LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNNekNDQVp5Z0F3SUJBZ0lKQUxpUG5Wc3ZxOGRzTUEwR0NTcUdTSWIzRFFFQkJRVUFNRk14Q3pBSkJnTlYKQkFZVEFsVlRNUXd3Q2dZRFZRUUlFd05tYjI4eEREQUtCZ05WQkFjVEEyWnZiekVNTUFvR0ExVUVDaE1EWm05dgpNUXd3Q2dZRFZRUUxFd05tYjI4eEREQUtCZ05WQkFNVEEyWnZiekFlRncweE16QXpNVGt4TlRRd01UbGFGdzB4Ck9EQXpNVGd4TlRRd01UbGFNRk14Q3pBSkJnTlZCQVlUQWxWVE1Rd3dDZ1lEVlFRSUV3Tm1iMjh4RERBS0JnTlYKQkFjVEEyWnZiekVNTUFvR0ExVUVDaE1EWm05dk1Rd3dDZ1lEVlFRTEV3Tm1iMjh4RERBS0JnTlZCQU1UQTJadgpiekNCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBemRHZnhpOUNOYk1mMVVVY3ZEUWg3TVlCCk92ZUlIeWMwRTBLSWJoaks1RmtDQlU0Q2lacmJmSGFnYVc3WkVjTjB0dDNFdnBiT014eGMvWlFVMldOL3Mvd1AKeHBoMHBTZnNmRnNUS000UmhUV0QydjRmZ2sreFppS2QxcDArTDRoVHRwd25FdzB1WFJWZDBraTZtdXdWNXkvUAorNUZIVWVsZHErcGdUY2d6dUs4Q0F3RUFBYU1QTUEwd0N3WURWUjBQQkFRREFnTGtNQTBHQ1NxR1NJYjNEUUVCCkJRVUFBNEdCQUppREFBdFkwbVFRZXV4V2R6TFJ6WG1qdmRTdUw5R295VDNCRi9qU25weHo1LzU4ZGJhOHBXZW4KdjNwajRQM3c1RG9Pc28wcnprWnkyakVzRWl0bFZNMm1MU2JRcE1NK01VVlFDUW9pRzZXOXh1Q0Z1eFNyd1BJUwpwQXFFQXVWNEROb3hRS0tXbWhWditKMHB0TVdEMjVQbnB4ZXE1c1h6Z2hmSm5zbEpsUU5ECi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
    
  3. Indiquez cette valeur de certificat pour le champ certificateAuthorityData dans ClientConfig.

Certificats CA pour les certificats intermédiaires

Un certificat intermédiaire joue un rôle de "chaîne de confiance" entre un certificat d'entité finale et un certificat racine. Cette valeur de certificat doit être mise en forme en tant que chaîne encodée en base64 lorsqu'elle est utilisée dans ClientConfig. Pour créer une seule chaîne, concaténez tous les certificats encodés au format PEM en une seule chaîne, puis encodez-la en base64.

Voici un exemple de chaîne de confiance contiguë commençant par le certificat racine.

ServerCert -> IntermediateCA -> DeptCA -> RootCA

Dans cet exemple, ServerCert est émis par IntermediateCA, qui est émis par DeptCA, qui à son tour est émis par RootCA.

Les chaînes de confiance partielles sont acceptées par GKE Identity Service. Cela signifie que vous ne pouvez fournir des chaînes qu'avec certains certificats, tels que :

IntermediateCA -> DeptCA -> RootCA

IntermediateCA -> DeptCA

ServerCert

Lorsque GKE Identity Service n'est configuré qu'avec une chaîne partielle, il vérifie l'identité du serveur en essayant de faire correspondre les certificats de la chaîne partielle avec l'identité présentée par le serveur.

Les versions antérieures de GKE Identity Service, telles que les versions antérieures à Google Distributed Cloud version 1.28.200, nécessitent une chaîne de confiance contiguë commençant par le certificat racine pour valider le serveur. Exemples de chaînes partielles compatibles avec les versions antérieures de GKE Identity Service :

ServerCert -> IntermediateCA -> DeptCA -> RootCA

IntermediateCA -> DeptCA -> RootCA

DeptCA -> RootCA

Si vous rencontrez des problèmes de validation de certificat et que vous ne savez pas quelle version de GKE Identity Service vous utilisez, essayez d'ajouter un certificat racine à votre chaîne de confiance si vous n'en avez pas pour voir si c'est la cause du problème.

Spécifier la chaîne de confiance des certificats dans ClientConfig

Pour spécifier la chaîne de confiance des certificats dans votre ClientConfig, procédez comme suit :

  1. Déterminez le format encodé en PEM pour les certificats CA que vous souhaitez inclure dans la chaîne de certificats.
  2. Concaténez les fichiers PEM en un seul fichier de sorte que le certificat racine se trouve à la fin du fichier. Voici à quoi ressemble la sortie :

    -----BEGIN CERTIFICATE-----
    IntermediateCA
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    DeptCA
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    RootCA certificate
    -----END CERTIFICATE-----
    
  3. Encodez le fichier concaténé en base64. Assurez-vous que le fichier contient une seule ligne de texte encodé en base64.

  4. Indiquez cette valeur de certificat pour le champ certificateAuthorityData dans ClientConfig.