9.3. 证书续订和有效期
集群 CA 和客户端 CA 证书只在有限的时间段内有效,称为有效期。这通常定义自生成证书以来的天数。
对于 Cluster Operator 自动创建的 CA 证书,您可以配置以下的有效性周期:
-
Kafka.spec.clusterCa.validityDays中的集群 CA 证书 -
Clients CA certificates in
Kafka.spec.clientsCa.validityDays
两个证书的默认有效期为 365 天。手动安装的 CA 证书应定义自己的有效期。
当 CA 证书过期时,仍信任该证书的组件和客户端不接受来自其证书由 CA 私钥签名的对等点的连接。组件和客户端需要信任新的 CA 证书。
要允许在不丢失服务的情况下续订 CA 证书,Cluster Operator 会在旧的 CA 证书过期前启动证书续订。
您可以配置 Cluster Operator 创建的证书的续订周期:
-
Kafka.spec.clusterCa.renewalDays中的集群 CA 证书 -
Clients CA certificates in
Kafka.spec.clientsCa.renewalDays
两个证书的默认续订周期为 30 天。
续订周期从当前证书的到期日期后测量。
根据续订周期的有效期
Not Before Not After
| |
|<--------------- validityDays --------------->|
<--- renewalDays --->|
要在创建 Kafka 集群后更改有效期和续订周期,您可以配置并应用 Kafka 自定义资源,并 手动更新 CA 证书。如果您不手动更新证书,则在下次自动更新证书时将使用新的周期。
证书有效期和续订周期的 Kafka 配置示例
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
# ...
spec:
# ...
clusterCa:
renewalDays: 30
validityDays: 365
generateCertificateAuthority: true
clientsCa:
renewalDays: 30
validityDays: 365
generateCertificateAuthority: true
# ...
在续订期间,Cluster Operator 的行为取决于集群 CA 和客户端 CA 的 generateCertificateAuthority 证书生成属性的设置。
true-
如果属性设为
true,Cluster Operator 会自动生成 CA 证书,并在续订周期内自动更新。 false-
如果属性设为
false,Cluster Operator 不会生成 CA 证书。如果要安装自己的证书,则使用此选项。
9.3.1. 使用自动生成的 CA 证书的续订过程 复制链接链接已复制到粘贴板!
Cluster Operator 在续订 CA 证书时按照以下顺序执行以下进程:
生成一个新的 CA 证书,但保留现有的密钥。
新证书将旧证书替换为对应
Secret中的名称ca.crt。生成新的客户端证书(用于 ZooKeeper 节点、Kafka 代理和实体 Operator)。
这并不严格是必需的,因为签名密钥没有改变,但它保留客户端证书的有效性周期与 CA 证书同步。
- 重启 ZooKeeper 节点,以便它们信任新的 CA 证书并使用新的客户端证书。
- 重启 Kafka 代理,以便它们信任新的 CA 证书并使用新的客户端证书。
重启主题和用户 Operator,以便它们信任新的 CA 证书并使用新的客户端证书。
用户证书由客户端 CA 签名。用户 Operator 生成的用户证书会在客户端 CA 续订时续订。
9.3.2. 客户端证书续订 复制链接链接已复制到粘贴板!
Cluster Operator 不知道使用 Kafka 集群的客户端应用程序。
当连接到集群时,并确保它们正确运行,客户端应用程序必须:
- 信任 <cluster> - cluster-ca-cert Secret 中发布的集群 CA 证书。
使用 < user-name> Secret 中发布的凭证连接到集群。
User Secret 以 PEM 和 PKCS #12 格式提供凭证,或者在使用 SCRAM-SHA 身份验证时提供密码。User Operator 在创建用户时会创建用户凭证。
您必须确保客户端在证书续订后继续工作。续订过程取决于客户端的配置方式。
如果要手动置备客户端证书和密钥,您必须生成新的客户端证书,并确保客户端在续订周期内使用新证书。在续订周期结束时无法执行此操作可能会导致客户端应用程序无法连接到集群。
对于在同一 OpenShift 集群和命名空间中运行的工作负载,Secret 可以挂载为卷,因此客户端 Pod 可以从 Secret 的当前状态构建其密钥存储和信任存储。有关此过程的详情,请参阅配置内部客户端以信任集群 CA。
9.3.3. 手动续订 Cluster Operator 生成的 CA 证书 复制链接链接已复制到粘贴板!
Cluster Operator 会自动续订其相应证书续订周期开始时,集群和客户端 CA 证书会自动续订。但是,您可以使用 strimzi.io/force-renew 注解在证书续订周期开始前手动续订其中一个或两个证书。出于安全原因,您可能执行此操作,或者更改了证书的续订或有效期。
更新的证书使用与旧证书相同的私钥。
如果您使用自己的 CA 证书,则无法使用 force-renew 注解。相反,请按照流程 续订您自己的 CA 证书。
先决条件
- Cluster Operator 正在运行。
- 安装 CA 证书和私钥的 Kafka 集群。
流程
将
strimzi.io/force-renew注解应用到包含您要更新的 CA 证书的Secret。Expand 表 9.13. 强制续订证书的 Secret 的注解 证书 Secret 注解命令 集群 CA
KAFKA-CLUSTER-NAME-cluster-ca-cert
oc annotate secret KAFKA-CLUSTER-NAME-cluster-ca-cert strimzi.io/force-renew=true客户端 CA
KAFKA-CLUSTER-NAME-clients-ca-cert
oc annotate secret KAFKA-CLUSTER-NAME-clients-ca-cert strimzi.io/force-renew=true在下一次协调时,Cluster Operator 将为您注解的
Secret生成一个新的 CA 证书。如果配置了维护时间窗,Cluster Operator 将在下次维护时间窗内第一次协调时生成新的 CA 证书。客户端应用程序必须重新加载 Cluster Operator 更新的集群和客户端 CA 证书。
检查 CA 证书有效的周期:
例如,使用
openssl命令:oc get secret CA-CERTIFICATE-SECRET -o 'jsonpath={.data.CA-CERTIFICATE}' | base64 -d | openssl x509 -subject -issuer -startdate -enddate -nooutCA-CERTIFICATE-SECRET 是
Secret的名称,对于集群 CA 证书是KAFKA-CLUSTER-NAME-cluster-ca-cert,对于客户端 CA 证书是KAFKA-CLUSTER-NAME-clients-ca-cert。ca -CERTIFICATE 是 CA 证书的名称,如
jsonpath={.data.ca\.crt}。该命令返回一个
notBefore和notAfter日期,这是 CA 证书的有效性周期。例如,对于集群 CA 证书:
subject=O = io.strimzi, CN = cluster-ca v0 issuer=O = io.strimzi, CN = cluster-ca v0 notBefore=Jun 30 09:43:54 2020 GMT notAfter=Jun 30 09:43:54 2021 GMT从 Secret 中删除旧证书。
当组件正在使用新证书时,旧的证书可能仍然处于活动状态。删除旧证书以移除任何潜在的安全风险。
9.3.4. 替换 Cluster Operator 生成的 CA 证书使用的私钥 复制链接链接已复制到粘贴板!
您可以替换由 Cluster Operator 生成的集群 CA 和客户端 CA 证书使用的私钥。当替换私钥时,Cluster Operator 会为新私钥生成一个新的 CA 证书。
如果您使用自己的 CA 证书,则无法使用 force-replace 注解。相反,请按照流程 续订您自己的 CA 证书。
先决条件
- Cluster Operator 正在运行。
- 安装 CA 证书和私钥的 Kafka 集群。
流程
将
strimzi.io/force-replace注解应用到包含您要更新的私钥的Secret。Expand 表 9.14. 替换私钥的命令 的私钥 Secret 注解命令 集群 CA
cluster-name-cluster-ca
oc annotate secret CLUSTER-NAME-cluster-ca strimzi.io/force-replace=true客户端 CA
cluster-name-clients-ca
oc annotate secret CLUSTER-NAME-clients-ca strimzi.io/force-replace=true
在下一次协调时,Cluster Operator 将:
-
为您注解的
Secret生成新私钥 - 生成新的 CA 证书
如果配置了维护时间窗,Cluster Operator 将在下次维护时间窗口中第一次协调时生成新的私钥和 CA 证书。
客户端应用程序必须重新加载 Cluster Operator 更新的集群和客户端 CA 证书。