为 GKE Identity Service 设置证书格式

本文档介绍如何在配置 GKE Identity Service 时设置证书格式。本指南可以帮助您在使用服务时避免并排查身份提供方证书问题。

概览

GKE Identity Service 是一项身份验证服务,可让您通过 OIDC 和 LDAP 等身份提供方登录 GKE 集群。建立 TLS 连接时,GKE Identity Service 会验证提供方的服务器证书,并验证提供方证书的 issuer 是否为已配置的证书授权机构 (CA) 证书之一。

ClientConfig 中的 certificateAuthorityData 字符串

用于验证提供方身份的 CA 证书在 ClientConfig 的 certificateAuthorityData 字段中进行配置,如以下示例所示。

LDAP 示例

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

其中,CERTIFICATE_AUTHORITY_DATA 包含 LDAP 服务器的 base64 编码且采用 PEM 格式的 CA 证书。将生成的字符串作为单独的一行添加到 certificateAuthorityData 中。只能为 ldapsstartTLS 连接提供此字段。

OIDC 示例

...
oidc:
  certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
...

其中,CERTIFICATE_AUTHORITY_DATA 包含身份提供方的 base64 编码的 PEM 格式的证书字符串。将生成的字符串作为单独的一行添加到 certificateAuthorityData 中。

Base64 编码的证书值

标准 base64 编码在 RFC 4864 中定义,使用字符 AZaz09+/。 数据使用 = 填充。

对 GKE Identity Service 的 CA 证书进行编码

SSL 证书具有 DER、PEM 和 PFX 等格式。PFX 文件通常使用密码进行加密。

使用身份提供方配置 GKE Identity Service 时,证书不应受密码保护。这是因为没有工作流程可用于指定解密密码。因此,请务必在任何 Linux 或 Unix 系统上使用 openssl 命令行工具将证书从其他格式转换为 PEM 编码文件。如果有多个证书,请串联证书并将它们作为单个 PEM 文件导入。

PEM 格式示例

以下是 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-----

请注意示例中的以下详细信息:

  • 证书分隔符以 BEGIN CERTIFICATE 开头,以 END CERTIFICATE 结尾。
  • 分隔符中使用的连字符数量是固定的。
  • 证书值使用带换行符(每 64 个字符换行一次)的标准 base64 (RFC 4864) 编码。
  • 换行符 (\n) 不可见。不要转义换行符。

在 ClientConfig 中指定证书值

如需在 ClientConfig 中指定证书值,请执行以下操作:

  1. 确定 CA 证书的 PEM 编码格式
  2. 根据 RFC 4864 对 PEM 文件进行 Base64 编码。确保输出是一个没有换行符的单个长字符串,请参考下面的 base64 编码 PEM 文件示例:
    LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNNekNDQVp5Z0F3SUJBZ0lKQUxpUG5Wc3ZxOGRzTUEwR0NTcUdTSWIzRFFFQkJRVUFNRk14Q3pBSkJnTlYKQkFZVEFsVlRNUXd3Q2dZRFZRUUlFd05tYjI4eEREQUtCZ05WQkFjVEEyWnZiekVNTUFvR0ExVUVDaE1EWm05dgpNUXd3Q2dZRFZRUUxFd05tYjI4eEREQUtCZ05WQkFNVEEyWnZiekFlRncweE16QXpNVGt4TlRRd01UbGFGdzB4Ck9EQXpNVGd4TlRRd01UbGFNRk14Q3pBSkJnTlZCQVlUQWxWVE1Rd3dDZ1lEVlFRSUV3Tm1iMjh4RERBS0JnTlYKQkFjVEEyWnZiekVNTUFvR0ExVUVDaE1EWm05dk1Rd3dDZ1lEVlFRTEV3Tm1iMjh4RERBS0JnTlZCQU1UQTJadgpiekNCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBemRHZnhpOUNOYk1mMVVVY3ZEUWg3TVlCCk92ZUlIeWMwRTBLSWJoaks1RmtDQlU0Q2lacmJmSGFnYVc3WkVjTjB0dDNFdnBiT014eGMvWlFVMldOL3Mvd1AKeHBoMHBTZnNmRnNUS000UmhUV0QydjRmZ2sreFppS2QxcDArTDRoVHRwd25FdzB1WFJWZDBraTZtdXdWNXkvUAorNUZIVWVsZHErcGdUY2d6dUs4Q0F3RUFBYU1QTUEwd0N3WURWUjBQQkFRREFnTGtNQTBHQ1NxR1NJYjNEUUVCCkJRVUFBNEdCQUppREFBdFkwbVFRZXV4V2R6TFJ6WG1qdmRTdUw5R295VDNCRi9qU25weHo1LzU4ZGJhOHBXZW4KdjNwajRQM3c1RG9Pc28wcnprWnkyakVzRWl0bFZNMm1MU2JRcE1NK01VVlFDUW9pRzZXOXh1Q0Z1eFNyd1BJUwpwQXFFQXVWNEROb3hRS0tXbWhWditKMHB0TVdEMjVQbnB4ZXE1c1h6Z2hmSm5zbEpsUU5ECi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
    
  3. 为 ClientConfig 中的 certificateAuthorityData 字段提供此证书值。

中间证书的 CA 证书

中间证书在最终实体证书和根证书之间扮演“信任链”角色。此证书值在 ClientConfig 中使用时应采用 base64 编码字符串的格式。如需创建单个字符串,可以先将完整的 PEM 编码证书串联成单个字符串,然后再进行 base64 编码。

下面是一个从根证书开始的连续信任链示例。

ServerCert -> IntermediateCA -> DeptCA -> RootCA

在此示例中,ServerCertIntermediateCA 颁发,IntermediateCA 由 DeptCA 颁发,DeptCA 又由 RootCA 颁发。

GKE Identity Service 支持部分信任链。也就是说,您只能为信任链提供部分证书,例如:

IntermediateCA -> DeptCA -> RootCA

IntermediateCA -> DeptCA

ServerCert

如果 GKE Identity Service 只配置了部分信任链,它将通过尝试将部分信任链中的证书与服务器提供的身份进行比对来验证服务器的身份。

早期版本的 GKE Identity Service(例如 Google Distributed Cloud 1.28.200 之前的版本)需要有从根证书开始的连续信任链才能验证服务器。早期版本的 GKE Identity Service 支持的部分信任链示例:

ServerCert -> IntermediateCA -> DeptCA -> RootCA

IntermediateCA -> DeptCA -> RootCA

DeptCA -> RootCA

如果您遇到证书验证问题,并且不知道自己使用的是哪个版本的 GKE Identity Service,请尝试向信任链添加根证书(如果您没有根证书),看看这是否是导致问题的原因。

在 ClientConfig 中指定证书信任链

如需在 ClientConfig 中指定证书信任链,请执行以下操作:

  1. 确定要包含在证书链中的 CA 证书的 PEM 编码格式
  2. 将 PEM 文件串联成一个文件,使根证书位于文件末尾。输出类似于如下所示:

    -----BEGIN CERTIFICATE-----
    IntermediateCA
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    DeptCA
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    RootCA certificate
    -----END CERTIFICATE-----
    
  3. 对串联文件进行 Base64 编码。确保该文件只包含单独的一行 base64 编码文本。

  4. 为 ClientConfig 中的 certificateAuthorityData 字段提供此证书值。