创建根证书授权机构
本页面介绍了如何在 CA 池中创建根证书授权机构 (CA)。
根 CA 位于公钥基础架构 (PKI) 层次结构的顶部,负责构成 PKI 的信任锚。要正确参与和 在 PKI 中使用证书,因此设备、软件或组件需要信任该 PKI。 这是通过将设备、软件或组件配置为信任根 CA 来实现的。 因此,根 CA 颁发的所有证书都受信任。
准备工作
- 确保您拥有 CA Service Operation Manager (
roles/privateca.caManager
) 或 CA Service Admin (roles/privateca.admin
) IAM 角色。有关详情,请参阅 配置 IAM 政策。 - 创建 CA 池。
- 确定您的 CA 设置。
创建根 CA
根 CA 具有自签名证书,您必须将其分发给信任 存储数据根 CA 的证书位于证书链的顶部。其他任何 CA 都无法撤销该 CA 证书。 根 CA 仅应用于根 CA 颁发的其他证书,而不适用于 本身。
控制台
如需创建根 CA,请执行以下操作。
转到 Certificate Authority Service 页面: Google Cloud 控制台
点击 CA 管理员标签页。
点击创建 CA。
选择 CA 类型
如需配置 CA 的永久性设置,例如层级、位置、 创建生命周期和运行状态时,请执行以下操作:
- 选择根 CA。
- 在有效期字段中,输入您希望 才有效。
- 可选:为 CA 选择一个层级。
- 点击区域,然后在列表中选择要创建 CA 的位置。我们建议创建地理位置较近的 CA 应用的客户端如需了解详情,请参阅选择最佳位置。
可选:选择要创建时所在的 CA 的运行状态。
可选:点击证书配置文件。在列表中,选择 与您希望 要颁发的 CA。
点击下一步。
- 在 Organization (O)(组织 (O))字段中,输入公司名称。
- 可选:在组织部门 (OU) 字段中,输入公司 下属行政单位或业务部门。
- 可选:在国家/地区名称字段中,输入由两个字母组成的国家/地区代码。
- 可选:在州或省/直辖市/自治区名称字段中,输入 您所在的州/省。
- 可选:在市行政区名称字段中,输入您所在城市的名称。
- 在 CA 通用名称 (CN) 字段中,输入 CA 名称。
- 在池 ID 字段中,输入 CA 池名称。您无法更改 在创建 CA 后创建的 CA 池。
- 点击下一步。
- 选择最符合您需求的密钥算法。相关信息 如何确定合适的密钥算法,请参阅 选择密钥算法。
- 点击下一步。
以下步骤是可选的。如果您跳过这些步骤,系统会应用默认设置。
- 选择使用由 Google 管理还是自行管理 Cloud Storage 存储桶。
- 选择是否要禁止发布证书 吊销列表 (CRL) 和 CA 证书传送到 Cloud Storage 存储桶。
- 点击下一步。
如果您未选择自行管理的 Cloud Storage 存储桶, CA Service 会在同一 作为 CA 的位置
默认情况下,系统会启用在 Cloud Storage 存储桶中发布 CRL 和 CA 证书的功能。要停用这些设置,请点击切换开关。
以下步骤是可选的。
如果要向 CA 添加标签,请执行以下操作:
- 点击 添加一项。
- 在密钥 1 字段中,输入标签键。
- 在值 1 字段中,输入标签值。
- 如果您想添加其他标签,请点击 Add item(添加项)。然后,添加 标签键和值(如第 2 步和第 3 步所述)。
- 点击下一步。
仔细检查所有设置,然后点击创建以创建 CA。
gcloud
如需创建 CA 池,请运行以下命令:
gcloud privateca pools create POOL_ID
将 POOL_ID 替换为 CA 池的名称。
如需了解详情,请参阅创建 CA 池。
如需详细了解此
gcloud
命令,请参阅 gcloud privateca pools create。在您创建的 CA 池中创建新的根 CA。
gcloud privateca roots create ROOT_CA_ID --pool=POOL_ID \ --key-algorithm=KEY_ALGORITHM \ --subject="CN=my-ca, O=Test LLC"
替换以下内容:
- ROOT_CA_ID:CA 的名称。
- POOL_ID:CA 池的名称。
- KEY_ALGORITHM:用于创建
Cloud KMS 密钥。此标志是可选标志。如果您没有添加
此标志,密钥算法默认为
rsa-pkcs1-4096-sha256
。对于 如需了解详情,请参阅 --key-algorithm 标志。
默认情况下,系统会以
STAGED
状态创建 CA。如需启用 CA,请执行以下操作: 请添加--auto-enable
标志。如果要将客户管理的 Cloud Storage 存储桶用于 发布 CA 证书和 CRL,添加
--bucket bucket-name
。将 bucket-name 替换为 Cloud Storage 存储桶的名称。如需查看完整的设置列表,请运行以下命令:
gcloud privateca roots create --help
Terraform
如需使用 Google 拥有和 Google 管理的密钥创建根 CA,请使用以下示例 配置:
如需使用自行管理的密钥创建根 CA,请使用以下示例 配置:
Go
如需向 CA Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需向 CA 服务进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需向 CA 服务进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST API
创建根 CA。
HTTP 方法和网址:
POST https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/caPools/POOL_ID/certificateAuthorities?certificate_authority_id=ROOT_CA_ID
请求 JSON 正文:
{ "type": "SELF_SIGNED", "lifetime": { "seconds": 315576000, "nanos": 0 }, "config": { "subject_config": { "subject": { "organization": "ORGANIZATION_NAME", "common_name": "COMMON_NAME" } }, "x509_config":{ "ca_options":{ "is_ca":true }, "key_usage":{ "base_key_usage":{ "cert_sign":true, "crl_sign":true } } } }, "key_spec":{ "algorithm":"RSA_PKCS1_4096_SHA256" } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID", "metadata": {...}, "done": false }
轮询该操作,直到它完成为止。
HTTP 方法和网址:
GET https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID", "metadata": {...}, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.security.privateca.v1.CertificateAuthority", "name": "...", } }
验证 CA 可以按预期运行后,您就可以启用它了 开始为 CA 池颁发负载均衡证书。
启用根 CA
gcloud
如需启用根 CA,请运行以下 gcloud
命令:
gcloud privateca roots enable ROOT_CA_ID --pool=POOL_ID
替换以下内容:
- ROOT_CA_ID:CA 的名称。
- POOL_ID:CA 池的名称。
Terraform
如果您使用 Terraform 创建根 CA,则根 CA 会在创建时启用。如需创建处于 STAGED
状态的根 CA,请将
将 desired_state
字段设置为 STAGED
。
创建 CA 后,您可以将 desired_state
字段设置为 ENABLED
或 DISABLED
。
Go
如需向 CA 服务进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需向 CA 服务进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需向 CA Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST API
让 CA 能够从 CA 池颁发证书。
HTTP 方法和网址:
POST https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/caPools/POOL_ID/certificateAuthorities/ROOT_CA_ID:enable
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID", "metadata": {...}, "done": false }
轮询该操作,直到它完成为止。
HTTP 方法和网址:
GET https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID", "metadata": {...}, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.security.privateca.v1.CertificateAuthority", "name": "...", } }
测试 CA
要验证 CA 是否能够颁发证书,请向以下网站请求证书:
关联的 CA 池,并明确提及您要转移的 CA 的名称
使用 --ca
标志进行测试。
您可以使用以下方法向 CA 池请求证书:
- 让 CA Service 为您创建私钥或公钥。
- 生成您自己的私钥或公钥并提交证书签名请求 (CSR)。
使用自动生成的私钥或公钥来请求 或来自 CA 池中的 CA 颁发的证书。本部分介绍了 使用该方法测试 CA。
使用自动生成的私钥或公钥来请求证书
来自 CA 池的 CA 时,运行以下 gcloud
命令:
gcloud privateca certificates create \
--issuer-pool=POOL_ID \
--ca=ROOT_CA_ID \
--generate-key \
--key-output-file=KEY_FILENAME \
--cert-output-file=CERT_FILENAME \
--dns-san=DNS_NAME
替换以下内容:
- POOL_ID:CA 池的名称。
- ROOT_CA_ID:您要测试的 CA 的唯一标识符。
- KEY_FILENAME:以 PEM 格式写入生成的密钥的文件。
- CERT_FILENAME:生成的 PEM 编码证书链文件将在其中写入的文件。证书链的顺序为从叶级证书到根证书。
DNS_NAME:一个或多个以英文逗号分隔的 DNS 主题备用名称 (SAN)。
--generate-key
标志会在您的计算机上生成新的 RSA-2048 私钥。
如需使用证书签名请求 (CSR) 向 CA 池中的 CA 请求证书,或者详细了解如何请求证书,请参阅请求证书和查看已颁发的证书。
克隆证书授权机构
克隆现有 CA 以续订该 CA,或创建具有相同 CA 的新 CA 配置,请运行以下命令:
gcloud privateca roots create NEW_CA_ID --pool=POOL_ID \
--from-ca=EXISTING_CA_ID \
--key-algorithm "ec-p384-sha384"
替换以下内容:
- NEW_CA_ID:新 CA 的唯一标识符。
- POOL_ID:您要配置到的 CA 池的名称 创建新的 CA。
创建根 CA 和从属 CA 时支持使用 --from-ca
标志。通过
现有 CA 必须与新 CA 位于同一 CA 池中。
--key-algorithm
标志会从现有 CA 复制所有 CA 配置(Cloud KMS 密钥版本和 Cloud Storage 存储桶除外)。不过,
您仍然可以通过以下方式覆盖新 CA 中的任何配置值
来明确提供相应标志例如,你仍然可以
指定 `--subject SUBJECT 可使用新的主题。
如果您省略 --key-algorithm
标志,则算法默认为:
rsa-pkcs1-4096-sha256
,适用于根 CA。rsa-pkcs1-2048-sha256
,适用于从属 CA。
如需详细了解此 gcloud
命令,请参阅 gcloud privateca roots create。