创建根证书授权机构
本页面介绍了如何在 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。
- 在有效期字段中,输入您希望 CA 证书颁发的证书的有效时长。
- 可选:为 CA 选择一个层级。
- 点击区域,然后在列表中选择要创建 CA 的位置。我们建议在地理位置靠近应用客户端的位置创建 CA。如需了解详情,请参阅选择最佳位置。
可选:选择要创建时所在的 CA 的运行状态。
可选:点击证书配置文件。在列表中,选择与您希望 CA 颁发的证书类型匹配的证书配置文件。
点击下一步。
- 在 Organization (O) 字段中,输入公司名称。
- 可选:在组织部门 (OU) 字段中,输入公司下属部门或业务部门。
- 可选:在国家/地区名称字段中,输入由两个字母组成的国家/地区代码。
- 可选:在州或省/自治区/直辖市名称字段中,输入您所在州/省/自治区/直辖市的名称。
- 可选:在 Locality name(市行政区名称)字段中,输入您所在城市的名称。
- 在 CA 通用名称 (CN) 字段中,输入 CA 名称。
- 在池 ID 字段中,输入 CA 池名称。创建 CA 后,您将无法更改 CA 池。
- 点击下一步。
- 选择最符合您需求的密钥算法。如需了解如何确定合适的密钥算法,请参阅选择密钥算法。
- 点击下一步。
以下步骤是可选的。如果您跳过这些步骤,系统将应用默认设置。
- 选择是使用 Google 管理的 Cloud Storage 存储桶还是自行管理的 Cloud Storage 存储桶。
- 选择是否禁止向 Cloud Storage 存储桶发布证书吊销列表 (CRL) 和 CA 证书。
- 点击下一步。
如果您未选择自行管理的 Cloud Storage 存储桶,则 CA Service 会在其所在位置创建 Google 管理的存储桶。
默认情况下,系统会允许在 Cloud Storage 存储桶上发布 CRL 和 CA 证书。如需停用这些设置,请点击切换开关。
以下步骤是可选的。
如果要为 CA 添加标签,请执行以下操作:
- 点击 添加一项。
- 在键 1 字段中,输入标签键。
- 在值 1 字段中,输入标签值。
- 如果您想添加其他标签,请点击 添加一项。然后,按照第 2 步和第 3 步中的说明添加标签键和值。
- 点击下一步。
仔细检查所有设置,然后点击创建以创建 CA。
gcloud
如需创建 CA 池,请运行以下命令:
gcloud privateca pools create POOL_ID
将 POOL_ID 替换为 CA 池的名称。
如需了解详情,请参阅创建 CA 池。
如需详细了解此
gcloud
命令,请参阅 gcloud privateca pool 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 服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
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,请在创建 CA 时将 desired_state
字段设置为 STAGED
。
您可以在创建 CA 后将 desired_state
字段设置为 ENABLED
或 DISABLED
。
Go
如需向 CA 服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需向 CA 服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需向 CA 服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
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。