注意

本文档适用于 Ceph 的开发版本。

证书管理

简介

Cephadm certmgr 充当 Cephadm 生成的所有自签名证书的根证书颁发机构 (CA)。对于需要 SSL 的服务,管理员可以选择自带证书或允许 Cephadm 生成自签名证书。这确保了安全的通信,同时为部署偏好提供了灵活性。

证书管理行为

Cephadm certmgr 会自动检测证书是自签名(由 Cephadm 生成)还是用户提供(作为嵌入值在 spec 中,或外部引用)。这种区别决定了它如何处理过期和续订

自签名证书

  • certmgr 可以完全自动化续订,确保服务无缝运行。

  • 自动化由配置参数控制,这些参数定义了证书持续时间、续订阈值以及是否启用自动轮换。

用户提供的证书

有两种类型

  • 内联 (Inline):嵌入在服务 spec 中的证书;不能通过 certmgr 直接修改。

  • 引用 (Reference):通过 certmgr 设置和管理的证书;必须手动上传。

有关 certmgr 如何处理用户提供的证书过期的详细信息,请参阅证书健康监测

配置

为了管理证书生命周期,certmgr 持续监控证书并根据证书类型和配置参数应用续订策略。Cephadm 提供了几个配置选项来管理证书生命周期和续订

  • mgr/cephadm/certificate_automated_rotation_enabled (默认: True):默认启用,此配置选项控制 Cephadm 是否在证书过期时自动轮换证书。这有助于确保连续性和安全性,无需手动干预。禁用时,cephadm 仍会定期检查证书,但不会自动续订过期的自签名证书,而是在检测到问题时发出健康错误/警告。

  • mgr/cephadm/certificate_duration_days (默认: 3 * 365, 最小: 90, 最大: 10 * 365):指定由 Cephadm 根 CA 生成和签名的自签名证书的持续时间(天)。这决定了续订所需的有效期。

  • mgr/cephadm/certificate_renewal_threshold_days (默认: 30, 最小: 10, 最大: 90):定义在证书过期前多少天 Cephadm 应该开始续订。这确保了在过期发生之前及时替换。这适用于自签名和用户提供的证书。对于用户提供的证书,Cephadm 将发出健康错误或警告,提醒管理员即将到来的续订期。

  • mgr/cephadm/certificate_check_period (默认: 1, 最小: 0, 最大: 30):指定检查证书有效性的频率(天)。这确保及时检测与证书过期相关的任何问题。将其设置为 0 将禁用证书检查功能。

证书健康监测

Cephadm 持续监控所有托管证书的状态,包括自签名和用户提供的证书。

  • 如果证书无效或已经过期,Cephadm 会发出健康错误 (CEPHADM_CERT_ERROR) 来提醒管理员。

  • 如果证书即将到期,如配置的 mgr/cephadm/certificate_renewal_threshold_days 所确定,Cephadm 会发出健康警告。

如果启用了自动化,自签名证书将由 Cephadm 自动续订,但用户提供的证书无法自动续订。在任何一种情况下,Cephadm 都会提醒管理员,以便他们及时采取行动。这种主动监控有助于确保不间断的服务运行,同时让用户控制其证书策略。

SSL 配置的 Spec 字段

所有支持 SSL/TLS 的服务 spec 都可以选择定义以下字段

  • ssl: 布尔值,用于启用/禁用 SSL。

  • ssl_cert: 证书内容 (用于 inline) 或名称 (用于 reference)。

  • ssl_key: 密钥内容 (用于 inline) 或名称 (用于 reference)。

  • certificate_source: inlinereferencecephadm_signed 之一。

如果 certificate_sourcereference 且证书丢失,用户需要使用以下 certmgr 命令上传证书

ceph orch certmgr cert set --cert-name <cert-name> --service-name <service-name> -i <cert-key-pem-file>

证书范围

Cephadm certmgr 支持三种不同的证书管理范围

  1. 全局范围

    • 此范围内的证书在所有服务守护程序之间共享,无论它们运行在哪个主机上。

    • 示例: mgmt-gateway 证书是一个全局共享证书,供所有服务守护程序使用。

  2. 每主机范围

    • 证书按主机分配,意味着每个主机都有自己唯一的证书。

    • 配置自定义证书时,用户必须指定证书适用的主机。

    • 示例: grafana 服务证书配置在主机级别,专门应用于单个机器。

  3. 每服务范围

    • 证书按服务名称配置(每个服务实例可以有自己的证书)。

    • 指定自定义证书时,用户必须定义它所属的服务。

    • 示例: rgw 服务证书专门分配给 RGW 服务。

列出证书

要列出所有由 Cephadm 管理的证书

ceph orch certmgr cert ls [--show-details] [--include-cephadm-signed] [--filter-by <expression>]

此命令显示当前由 Cephadm 管理的所有证书的概览。 --show-details 选项包括其他信息,例如颁发机构和证书扩展。

默认情况下,此命令会省略 Cephadm 签名的证书。要包括它们,请传递 --include-cephadm-signed 参数。

示例

ceph orch certmgr cert ls --include-cephadm-signed
ceph orch certmgr cert ls --filter-by "status=expired"
ceph orch certmgr cert ls --filter-by "scope=service,status=expiring"
ceph orch certmgr cert ls --include-cephadm-signed --filter-by "name=rgw*,status=valid"

列出实体

显示与托管证书相关联的所有实体。

ceph orch certmgr bindings ls

列出使用者(服务)与 certmgr 管理的证书/密钥之间的所有当前证书绑定。

检查证书状态

要检查特定证书的状态和有效性

ceph orch certmgr cert check

此命令验证所有托管证书的完整性和过期状态。

列出证书密钥

要列出与托管证书相关联的所有私钥

ceph orch certmgr key ls [--include-cephadm-signed]

此命令显示当前由 cephadm 管理的密钥。默认情况下,此命令会省略 Cephadm 签名的密钥。要包括它们,请传递 --include-cephadm-signed 参数。

检索证书

要检索特定证书的内容

ceph orch certmgr cert get <certificate_name> [--service_name <value>] [--hostname <value>] [--no-exception-when-missing]

使用 ceph orch certmgr bindings ls 列出的 <service-name>。对于具有主机或服务范围的证书,根据需要包括 --hostname--service_name 参数。

检索证书密钥

要检索与特定证书相关联的私钥

ceph orch certmgr key get <key_name> [--service_name <value>] [--hostname <value>] [--no-exception-when-missing]

<key-name> 替换为 ceph orch certmgr key ls 中的实际证书名称。对于具有主机或服务范围的证书,根据需要包括 --hostname--service_name 参数。

设置证书-密钥对

要将证书与私钥关联

ceph orch certmgr cert-key set <service-type> [--cert <value>] [--key <value>] [--service_name <value>] [--hostname <value>] [-i <cert-key-path>] [--force]

使用此命令上传或替换特定服务的现有证书/密钥对。将 <service-type> 替换为 ceph orch certmgr bindings ls 中的实际证书名称。 -i 选项可用于指定包含 PEM 格式的组合证书和密钥的文件。此文件应包括串联在一起的证书和私钥。

设置证书

要更新或设置新证书

ceph orch certmgr cert set <certificate_name> [--cert <value>] [--service_name <value>] [--hostname <value>] [-i <cert-path>]

使用此命令添加或替换现有证书。

设置私钥

要更新或设置新私钥

ceph orch certmgr key set <key-name> [--key <value>] [--service_name <value>] [--hostname <value>] [-i <key-path>]

此命令允许管理员为服务提供新的私钥。

移除证书

要移除现有证书

ceph orch certmgr cert rm <certificate_name> [--service_name <value>] [--hostname <value>]

注意: 对于具有主机或服务范围的证书,使用 --service-name--hostname 选项来指定目标。

<certificate_name> 必须是有效的证书名称。使用 ceph orch certmgr cert ls 列出支持的证书。

移除私钥

要移除现有私钥

ceph orch certmgr key rm <key-name> [--service_name <value>] [--hostname <value>]

注意: 对于具有主机或服务范围的密钥,使用 --service-name--hostname 选项来指定目标。

<key_name> 必须是有效的密钥名称。使用 ceph orch certmgr key ls 列出支持的密钥。

生成证书

要自动生成新的证书和密钥对

ceph orch certmgr generate-certificates <module_name>

此命令为指定的 Manager module 预配新证书。它通常用于需要自动 TLS 预配的指定模块(例如,dashboard)。

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入