Zertifikate für GKE Identity Service formatieren

In diesem Dokument wird erläutert, wie Sie Zertifikate beim Konfigurieren von GKE Identity Service formatieren. Diese Anleitung soll Ihnen dabei helfen, Probleme mit Identitätsanbieterzertifikaten bei der Verwendung des Dienstes zu vermeiden und zu beheben.

Überblick

GKE Identity Service ist ein Authentifizierungsdienst, mit dem Sie sich über Identitätsanbieter wie OIDC und LDAP bei Ihren Anthos-Clustern anmelden können. Beim Herstellen einer TLS-Verbindung validiert GKE Identity Service das Serverzertifikat des Anbieters und prüft, ob der issuer des Zertifikats des Anbieters eines der konfigurierten CA-Zertifikate ist.

String certificateAuthorityData in ClientConfig

Das CA-Zertifikat, mit dem die Identität des Anbieters geprüft wird, ist in ClientConfig im Feld certificateAuthorityData konfiguriert, wie in den folgenden Beispielen gezeigt.

Beispiel für LDAP

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

Dabei enthält CERTIFICATE_AUTHORITY_DATA ein base64-codiertes, PEM-formatiertes CA-Zertifikat für den LDAP-Server. Fügen Sie den resultierenden String in certificateAuthorityData als eine einzelne Zeile ein. Dies muss nur für ldaps- und startTLS-Verbindungen angegeben werden.

Beispiel für OIDC

...
oidc:
  certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
...

Dabei enthält CERTIFICATE_AUTHORITY_DATA einen base64-codierten, PEM-formatierten Zertifikatstring für den Identitätsanbieter. Fügen Sie den resultierenden String in certificateAuthorityData als eine einzelne Zeile ein.

Base64-codierter Zertifikatwert

In RFC 4864 definiert, verwendet die Standard-Base64-Codierung die Zeichen A bis Z, a zu z, 0 bis 9, + und /. Daten werden mit = aufgefüllt.

CA-Zertifikat für GKE Identity Service codieren

SSL-Zertifikate haben Formate wie DER, PEM und PFX. PFX-Dateien werden in der Regel mit einem Passwort verschlüsselt.

Wenn Sie GKE Identity Service mit einem Identitätsanbieter konfigurieren, sollten Zertifikate nicht passwortgeschützt sein. Das liegt daran, dass kein Workflow verfügbar ist, um das Passwort für die Entschlüsselung anzugeben. Verwenden Sie daher unter jedem Linux- oder Unix-System ein openssl-Befehlszeilentool, um Ihre Zertifikate aus anderen Formaten in PEM-codierte Dateien zu konvertieren. Wenn mehrere Zertifikate vorhanden sind, verketten Sie die Zertifikate und importieren Sie sie in eine einzelne PEM-Datei.

Beispiel für das PEM-Format

Hier ist ein Beispiel für ein PEM-codiertes Zertifikat:

-----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-----

Beachten Sie die folgenden Details im Beispiel:

  • Die Zertifikatstrennzeichen beginnen mit BEGIN CERTIFICATE und enden mit END CERTIFICATE.
  • Die Anzahl der in den Trennzeichen verwendeten Bindestriche ist unveränderlich.
  • Der Zertifikatwert verwendet die standardmäßige base64-Codierung (RFC 4864) mit Zeilenumbrüchen (nach 64 Zeichen).
  • Die Zeilenumbrüche (\n) sind nicht sichtbar. Verwenden Sie kein Maskierungszeichen für den Zeilenumbruch.

Zertifikatwert in ClientConfig angeben

So geben Sie den Zertifikatwert in Ihrer ClientConfig an:

  1. Ermitteln Sie das PEM-codierte Format für das CA-Zertifikat.
  2. Codieren Sie die PEM-Datei gemäß RFC 4864 mit base64. Achten Sie darauf, dass die Ausgabe ein langer String ohne Zeilenumbrüche ist, wie im folgenden Beispiel einer base64-codierten PEM-Datei:
    LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNNekNDQVp5Z0F3SUJBZ0lKQUxpUG5Wc3ZxOGRzTUEwR0NTcUdTSWIzRFFFQkJRVUFNRk14Q3pBSkJnTlYKQkFZVEFsVlRNUXd3Q2dZRFZRUUlFd05tYjI4eEREQUtCZ05WQkFjVEEyWnZiekVNTUFvR0ExVUVDaE1EWm05dgpNUXd3Q2dZRFZRUUxFd05tYjI4eEREQUtCZ05WQkFNVEEyWnZiekFlRncweE16QXpNVGt4TlRRd01UbGFGdzB4Ck9EQXpNVGd4TlRRd01UbGFNRk14Q3pBSkJnTlZCQVlUQWxWVE1Rd3dDZ1lEVlFRSUV3Tm1iMjh4RERBS0JnTlYKQkFjVEEyWnZiekVNTUFvR0ExVUVDaE1EWm05dk1Rd3dDZ1lEVlFRTEV3Tm1iMjh4RERBS0JnTlZCQU1UQTJadgpiekNCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBemRHZnhpOUNOYk1mMVVVY3ZEUWg3TVlCCk92ZUlIeWMwRTBLSWJoaks1RmtDQlU0Q2lacmJmSGFnYVc3WkVjTjB0dDNFdnBiT014eGMvWlFVMldOL3Mvd1AKeHBoMHBTZnNmRnNUS000UmhUV0QydjRmZ2sreFppS2QxcDArTDRoVHRwd25FdzB1WFJWZDBraTZtdXdWNXkvUAorNUZIVWVsZHErcGdUY2d6dUs4Q0F3RUFBYU1QTUEwd0N3WURWUjBQQkFRREFnTGtNQTBHQ1NxR1NJYjNEUUVCCkJRVUFBNEdCQUppREFBdFkwbVFRZXV4V2R6TFJ6WG1qdmRTdUw5R295VDNCRi9qU25weHo1LzU4ZGJhOHBXZW4KdjNwajRQM3c1RG9Pc28wcnprWnkyakVzRWl0bFZNMm1MU2JRcE1NK01VVlFDUW9pRzZXOXh1Q0Z1eFNyd1BJUwpwQXFFQXVWNEROb3hRS0tXbWhWditKMHB0TVdEMjVQbnB4ZXE1c1h6Z2hmSm5zbEpsUU5ECi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
    
  3. Geben Sie diesen Zertifikatwert für das Feld certificateAuthorityData in der ClientConfig an.

CA-Zertifikate für Zwischenzertifikate

Ein Zwischenzertifikat spielt eine Rolle in der "Vertrauenskette" zwischen einem Endentitätszertifikat und einem Root-Zertifikat. Dieser Zertifikatwert sollte als base64-codierter String formatiert werden, wenn er in der ClientConfig verwendet wird. Zum Erstellen eines einzelnen Strings verketten Sie die vollständigen PEM-codierten Zertifikate zu einem einzelnen String und codieren Sie ihn dann mit base64.

Hier ist ein Beispiel für eine zusammenhängende Vertrauenskette, die mit dem Root-Zertifikat beginnt.

ServerCert -> IntermediateCA -> DeptCA -> RootCA

In diesem Beispiel wird ServerCert von IntermediateCA ausgestellt, das von DeptCA ausgestellt wird, welches wiederum von RootCA ausgestellt wird.

Teilweise Vertrauensketten werden von GKE Identity Service unterstützt. Das bedeutet, dass Sie Ketten nur mit einigen Zertifikaten bereitstellen können, z. B.:

IntermediateCA -> DeptCA -> RootCA

IntermediateCA -> DeptCA

ServerCert

Wenn GKE Identity Service nur mit einer teilweisen Kette konfiguriert ist, wird es die Identität des Servers überprüfen, indem es versucht, die Zertifikate in der teilweisen Kette mit der vom Server bereitgestellten Identität abzugleichen.

Frühere Versionen von GKE Identity Service wie Versionen vor GKE on VMware und GKE on Bare Metal 1.28.200 erfordern eine zusammenhängende Vertrauenskette, die ab dem Root-Zertifikat beginnt, um den Server zu verifizieren. Beispiele für teilweise Ketten, die von früheren Versionen von GKE Identity Service unterstützt werden:

ServerCert -> IntermediateCA -> DeptCA -> RootCA

IntermediateCA -> DeptCA -> RootCA

DeptCA -> RootCA

Wenn Probleme bei der Zertifikatsprüfung auftreten und Sie nicht wissen, welche Version von GKE Identity Service Sie verwenden, fügen Sie Ihrer Vertrauenskette ein Root-Zertifikat hinzu, falls Sie keines haben, um festzustellen, ob dies die Ursache des Problems ist.

Zertifikats-Vertrauenskette in ClientConfig angeben

So geben Sie die Zertifikats-Vertrauenskette in Ihrer ClientConfig an:

  1. Bestimmen Sie das PEM-codierte Format für die CA-Zertifikate, die Sie in die Zertifikatskette aufnehmen möchten.
  2. Verketten Sie die PEM-Dateien zu einer einzelnen Datei, sodass sich das Root-Zertifikat am Ende der Datei befindet. Die Ausgabe sieht so aus:

    -----BEGIN CERTIFICATE-----
    IntermediateCA
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    DeptCA
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    RootCA certificate
    -----END CERTIFICATE-----
    
  3. Codieren Sie die verkettete Datei mit base64. Achten Sie darauf, dass die Datei eine einzige Zeile mit base64-codiertem Text enthält.

  4. Geben Sie diesen Zertifikatwert für das Feld certificateAuthorityData in der ClientConfig an.