创建根证书授权机构
本页介绍了如何在 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 池或新的 CA 池中创建根 CA。以下说明使用现有池。
如需在现有 CA 池中创建根 CA,请执行以下操作:
前往 Google Cloud 控制台中的 Certificate Authority Service 页面。
点击 CA 管理器标签页。
点击创建 CA
展开箭头,然后选择在现有 CA 池中创建 CA。
选择 CA 池
从列表中选择一个现有 CA 池,然后点击继续。
选择 CA 类型
- 在类型下,选择根 CA。
- 在有效期字段中,输入您希望由 CA 证书颁发的证书的有效期。
- 在已初始化状态下,选择要创建的 CA 的操作状态。
- 点击继续。
- 在组织 (O) 字段中,输入贵公司的名称。
- 可选:在组织部门 (OU) 字段中,输入公司分支或业务部门。
- 可选:在国家/地区名称 (C) 字段中,输入一个由两个字母组成的国家/地区代码。
- 可选:在州或省名称字段中,输入您所在的州/省的名称。
- 可选:在地理位置名称字段中,输入您所在的城市的名称。
- 在 CA 通用名称 (CN) 字段中,输入 CA 名称。
- 点击继续。
- 选择最符合您需求的密钥算法。如需了解如何确定合适的密钥算法,请参阅选择密钥算法。
- 点击继续。
- 选择要使用 Google 管理的 Cloud Storage 存储分区还是客户管理的 Cloud Storage 存储分区。
- 对于 Google 管理的 Cloud Storage 存储分区,CA Service 会在 CA 所在的位置创建 Google 管理的存储分区。
- 对于客户管理的 Cloud Storage 存储分区,请点击“浏览”,然后选择其中一个现有 Cloud Storage 存储分区。
- 点击继续。
以下步骤是可选的。
如果您想向 CA 添加标签,请执行以下操作:
- 点击 Add item(添加内容)。
- 在密钥 1 字段中,输入标签键。
- 在值 1 字段中,输入标签值。
- 如果您想添加其他标签,请点击 Add item(添加项)。然后,添加标签键和值(如第 2 步和第 3 步所述)。
- 点击继续。
仔细检查所有设置,然后点击完成以创建 CA。
如需在现有 CA 池中创建新的根 CA,请运行以下命令:
gcloud privateca roots create
ROOT_CA_ID \ --location=LOCATION \ --pool=POOL_ID \ --key-algorithm=KEY_ALGORITHM \ --subject="CN=my-ca, O=Test LLC"替换以下内容:
- ROOT_CA_ID:CA 的名称。
- LOCATION: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
如需使用 且归 Google 所有并由 Google 管理的 加密密钥创建根 CA,请使用以下示例配置:
如需使用自有密钥创建根 CA,请使用以下示例配置:
如需向 CA Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如需向 CA Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如需向 CA Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
创建根 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" } }如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为
request.json
的文件中,然后执行以下命令:curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /caPools/POOL_ID /certificateAuthorities?certificate_authority_id=ROOT_CA_ID "PowerShell (Windows)
将请求正文保存在名为
request.json
的文件中,然后执行以下命令:$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /caPools/POOL_ID /certificateAuthorities?certificate_authority_id=ROOT_CA_ID " | Select-Object -Expand Content您应该收到类似以下内容的 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 如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
执行以下命令:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /operations/operation-UUID "PowerShell (Windows)
执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /operations/operation-UUID " | Select-Object -Expand Content您应该收到类似以下内容的 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,请运行以下 gcloud
命令:
gcloud privateca roots enable ROOT_CA_ID --location=LOCATION --pool=POOL_ID
替换以下内容:
- ROOT_CA_ID:CA 的名称。
- LOCATION:CA 池的位置。如需查看位置的完整列表,请参阅位置。
- POOL_ID:CA 池的名称。
如果您使用 Terraform 创建根 CA,则根 CA 会在创建时启用。如需创建处于 STAGED
状态的根 CA,请在创建 CA 时将 desired_state
字段设置为 STAGED
。
在创建 CA 后,您可以将 desired_state
字段设置为 ENABLED
或 DISABLED
。
如需向 CA Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如需向 CA Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如需向 CA Service 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
让 CA 能够从 CA 池颁发证书。
HTTP 方法和网址:
POST https://privateca.googleapis.com/v1/projects/
PROJECT_ID /locations/LOCATION /caPools/POOL_ID /certificateAuthorities/ROOT_CA_ID :enable如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /caPools/POOL_ID /certificateAuthorities/ROOT_CA_ID :enable"PowerShell (Windows)
执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /caPools/POOL_ID /certificateAuthorities/ROOT_CA_ID :enable" | Select-Object -Expand Content您应该收到类似以下内容的 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 如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
执行以下命令:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /operations/operation-UUID "PowerShell (Windows)
执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /operations/operation-UUID " | Select-Object -Expand Content您应该收到类似以下内容的 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 \
--issuer-location=ISSUER_LOCATION \
--ca=ROOT_CA_ID \
--generate-key \
--key-output-file=KEY_FILENAME \
--cert-output-file=CERT_FILENAME \
--dns-san=DNS_NAME
替换以下内容:
- POOL_ID:CA 池的名称。
- ISSUER_LOCATION:签发数字证书的证书授权机构 (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 \
--location=LOCATION \
--pool=POOL_ID \
--from-ca=EXISTING_CA_ID \
--key-algorithm "ec-p384-sha384"
替换以下内容:
- NEW_CA_ID:新 CA 的唯一标识符。
- LOCATION:CA 池的位置。
- POOL_ID:您要创建新 CA 的 CA 池的名称。
- EXISTING_CA_ID:来源 CA 的 ID 或来源 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。