创建根证书授权机构
本页介绍了如何在 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 的 CRL 仅适用于根 CA 颁发的其他证书,而非自身。
控制台
如需创建根 CA,请执行以下操作。
前往 Google Cloud 控制台中的 Certificate Authority Service 页面。
点击 CA 管理器标签页。
点击创建 CA。
选择 CA 类型
如需配置 CA 的永久性设置(例如层级、位置、生命周期和创建时的运行状态),请执行以下操作:
- 选择根 CA。
- 在 Valid for 字段中,输入您希望由 CA 证书颁发的证书有效的期限。
- 可选:为 CA 选择层级。
- 点击区域,然后在列表中选择要创建 CA 的位置。我们建议您在靠近应用客户端的地理位置创建 CA。如需了解详情,请参阅选择最佳位置。
可选:选择要创建的 CA 的操作状态。
可选:点击证书配置文件。在列表中,选择与您希望 CA 颁发的证书类型相符的证书配置文件。
点击下一步。
- 在组织 (O) 字段中,输入贵公司的名称。
- 可选:在组织部门 (OU) 字段中,输入公司分支或业务部门。
- 可选:在国家/地区名称字段中,输入两个字母的国家/地区代码。
- 可选:在州或省名称字段中,输入您所在的州/省的名称。
- 可选:在地理位置名称字段中,输入您所在的城市的名称。
- 在 CA 通用名称 (CN) 字段中,输入 CA 名称。
- 在 Pool ID 字段中,输入 CA 池名称。CA 一经创建,便无法更改 CA 池。
- 点击下一步。
- 选择最符合您需求的密钥算法。如需了解如何确定合适的密钥算法,请参阅选择密钥算法。
- 点击下一步。
以下步骤是可选的。如果您跳过这些步骤,系统会应用默认设置。
- 选择要使用 Google 管理的 Cloud Storage 存储桶还是自行管理的 Cloud Storage 存储桶。
- 选择是否要停用将证书吊销列表 (CRL) 和 CA 证书发布到 Cloud Storage 存储桶的功能。
- 点击下一步。
如果您未选择自有 Cloud Storage 存储桶,CA Service 会在与 CA 相同的位置创建一个 Google 管理的存储桶。
默认情况下,系统会启用在 Cloud Storage 存储桶中发布 CRL 和 CA 证书的功能。如需停用这些设置,请点击相应切换开关。
以下步骤是可选的。
如果您想向 CA 添加标签,请执行以下操作:
- 点击 Add item(添加内容)。
- 在密钥 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 标志。
默认情况下,CA 会在
STAGED
状态下创建。如需默认启用 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 Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需向 CA Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
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 池签发负载均衡证书。
启用根 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,请在创建 CA 时将 desired_state
字段设置为 STAGED
。
创建 CA 后,您可以将 desired_state
字段设置为 ENABLED
或 DISABLED
。
Go
如需向 CA Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需向 CA Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
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,请运行以下命令:
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。