从外部 CA 创建从属 CA
本页面介绍了如何创建链接到外部根 CA 的从属证书授权机构 (CA)。
如果您有包含根 CA 和从属 CA 的现有公钥基础架构 (PKI) 层次结构,则可以保留相同的根 CA,并在 CA Service 中创建一个链接到外部根 CA 的从属 CA。外部根 CA 的密钥和操作仍保留在 之外 Google Cloud。 您只能使用外部根 CA 向 Google Cloud颁发从属 CA 证书。任何信任外部根 CA 的工作负载都会立即信任从属 CA。然后,您可以使用从属 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 证书签名请求 (CSR):第一 步是为从属 CA 生成 CSR,然后下载 CSR。
获取由外部根 CA 签名的从属 CA 证书: 第二步是将 CSR 提交给外部根 CA 进行签名。请务必遵循外部根 CA 的具体说明来提交 CSR 并获取已签名的证书。
将已签名的从属 CA 证书导入 CA Service:最后一步是使用 Google Cloud CLI 或控制台上传已签名的 PEM 证书链。 Google Cloud
以下部分介绍了如何从外部根 CA 创建从属 CA。
创建 CSR
控制台
在 Google Cloud 控制台中,前往 Certificate Authority Service 页面。
点击 CA 管理器 标签页。
点击创建 CA 。
选择 CA 类型:
- 点击从属 CA 。
- 在有效期 字段中,输入您希望从属 CA 颁发的证书的有效期。
- 点击根 CA 是外部 CA 。
- 为 CA 层级 选择一个可用选项。如需了解更多 信息,请参阅选择操作 层级。
- 在区域化 下,从列表中选择一个 CA 位置 。
- 点击下一步 。
- 在组织 (O) 字段中,输入您公司的名称。
- 可选:在组织部门 (OU) 字段中,输入公司细分或业务单位。
- 可选:在国家/地区名称 (C) 字段中,输入双字母国家/地区代码。
- 可选:在州/省份名称 字段中,输入您所在州的名称。
- 可选:在所在地名称 字段中,输入您所在城市的名称。
- 在 CA 通用名称 (CN) 字段中,输入 CA 名称。
- 点击继续 。
- 选择最符合您需求的密钥算法。如需详细了解签名密钥选项,请参阅配置 CA 签名密钥。
- 如需使用客户管理的签名密钥,请选择客户管理的密钥 并提供 Cloud Key Management Service 加密密钥版本。
- 点击继续 。
- 选择是要使用 Google 管理的 Cloud Storage 存储桶还是客户管理的 Cloud Storage 存储桶。
- 对于 Google 管理的 Cloud Storage 存储桶,CA Service 会在与 CA 相同的位置创建一个 Google 管理的存储桶。
- 对于客户管理的 Cloud Storage 存储桶,请点击“浏览”并选择一个现有的 Cloud Storage 存储桶。
- 点击继续 。
以下步骤是可选的。
如需向 CA 添加标签,请执行以下操作:
- 点击 添加项。
- 在密钥 1 字段中,输入标签键。
- 在值 1 字段中,输入标签值。
- 如需添加其他标签,请点击 添加项。然后,按照第 2 步和第 3 步中的说明添加标签键和值。
- 点击继续 。
仔细查看所有设置,然后点击完成 以创建 CA。
下载 CSR
- 在证书授权机构 页面上,选择要激活的 CA。
- 点击 激活 。
在随即打开的对话框中,点击 下载 CSR。
gcloud
如需为从属 CA 创建 CA 池,请运行以下命令。 如需了解详情,请参阅创建 CA 池。
gcloud privateca pools create SUBORDINATE_POOL_ID --location=LOCATION替换以下内容:
- SUBORDINATE_POOL_ID:CA 池的名称。
- LOCATION:CA 池的位置。
如需在创建的 CA 池中创建从属 CA,请运行以下
gcloud命令。gcloud命令还会创建 CSR 并将其保存 到 FILE_NAME 文件中。gcloud privateca subordinates create SUBORDINATE_CA_ID \ --pool=SUBORDINATE_POOL_ID \ --location=LOCATION \ --create-csr --csr-output-file=FILE_NAME \ --key-algorithm="ec-p256-sha256" \ --subject="CN=Example Server TLS CA, O=Example LLC"替换以下内容:
- SUBORDINATE_CA_ID:从属 CA 的唯一标识符。
- SUBORDINATE_POOL_ID:CA 池的名称。
- LOCATION:CA 池的位置。
- FILE_NAME:PEM 编码的 CSR 写入到的文件的名称。
--key-algorithm标志用于指定您要用于为 CA 创建受管 Cloud HSM 密钥的加密算法。--subject标志用于指定证书正文的 X.501 名称。如需详细了解
gcloud privateca subordinates create命令,请参阅 gcloud privateca subordinates create。如需使用客户管理的签名密钥创建从属 CA,请运行以下命令:
gcloud privateca subordinates create SUBORDINATE_CA_ID \ --pool=SUBORDINATE_POOL_ID \ --location=LOCATION \ --create-csr --csr-output-file=FILE_NAME \ --kms-key-version=KMS_KEY_VERSION \ --subject="CN=Example Server TLS CA, O=Example LLC"替换以下内容:
- SUBORDINATE_CA_ID:从属 CA 的唯一标识符。
- SUBORDINATE_POOL_ID:CA 池的名称。
- LOCATION:CA 池的位置。
- FILE_NAME:PEM 编码的 CSR 写入到的文件的名称。
- KMS_KEY_VERSION:客户管理的 Cloud KMS 加密密钥版本的完整资源 ID,用作签名密钥。
如需详细了解签名密钥选项和准备客户管理的签名密钥,请参阅配置 CA 签名密钥。
创建 CSR 后,系统会返回以下语句:
Created Certificate Authority [projects/my-project-pki/locations/us-west1/caPools/SUBORDINATE_POOL_ID/certificateAuthorities/SUBORDINATE_CA_ID] and saved CSR to FILE_NAME.
如需查看可用设置的完整列表,请运行以下命令:
gcloud privateca subordinates create --help
如果您丢失了 CSR,可以使用以下命令再次下载:
gcloud privateca subordinates get-csr SUBORDINATE_CA_ID \
--pool=SUBORDINATE_POOL_ID \
--location=LOCATION
Terraform
如需在 CA 池中创建 CA 池和从属 CA,请使用以下配置文件:
resource "google_privateca_ca_pool" "default" { name = "test-ca-pool" location = "us-central1" tier = "ENTERPRISE" } resource "google_privateca_certificate_authority" "sub-ca" { pool = google_privateca_ca_pool.default.name certificate_authority_id = "my-certificate-authority-sub" location = "us-central1" config { subject_config { subject { organization = "HashiCorp" common_name = "my-subordinate-authority" } subject_alt_name { dns_names = ["hashicorp.com"] } } x509_config { ca_options { is_ca = true # Force the sub CA to only issue leaf certs max_issuer_path_length = 0 } key_usage { base_key_usage { cert_sign = true crl_sign = true } extended_key_usage { } } } } lifetime = "86400s" key_spec { algorithm = "RSA_PKCS1_4096_SHA256" } type = "SUBORDINATE" }如需提取 CSR,请添加以下配置。
data "google_privateca_certificate_authority" "sub-ca-csr" { location = "us-central1" pool = google_privateca_ca_pool.default.name certificate_authority_id = google_privateca_certificate_authority.sub-ca.certificate_authority_id } output "csr" { value = data.google_privateca_certificate_authority.sub-ca-csr.pem_csr }运行
terraform apply。
为 CSR 签名
将生成的 CSR 文件传递给组织中负责证书颁发的成员,并请求他们为其签名。具体步骤取决于您组织的设置。
您可以使用以下 openssl 命令试用简单的根 CA:
Shell
为新的根 CA 配置设置。
cat > root.conf <<- EOM
[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3_ca
prompt = no
[ req_distinguished_name ]
commonName = Sample Root
[ v3_ca ]
subjectKeyIdentifier=hash
basicConstraints=critical, CA:true
EOM
创建新的根 CA。
openssl req -x509 -new -nodes -config root.conf -keyout rootCA.key \
-days 3000 -out rootCA.crt -batch
配置必须添加到新的从属 CA 证书的扩展程序。
cat > extensions.conf <<- EOM
basicConstraints=critical,CA:TRUE,pathlen:0
keyUsage=critical,keyCertSign,cRLSign
extendedKeyUsage=critical,serverAuth
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOM
使用此根为从属 CA 的 CSR 签名。
openssl x509 -req -in FILE_NAME -CA rootCA.crt -CAkey rootCA.key \
-CAcreateserial -out subordinate.crt -days 1095 -sha256 -extfile extensions.conf
将整个证书链连接到单个文件中。
cat subordinate.crt > chain.crt
cat rootCA.crt >> chain.crt
上传已签名证书
如需使用已签名证书激活从属 CA,请执行以下操作:
控制台
前往Certificate Authority Service页面,在 Google Cloud 控制台中。
点击 CA 管理器 标签页。
在证书授权机构 下,选择您 创建的从属 CA。
点击 激活 。
在随即打开的对话框中,点击下载 CSR 以下载颁发 CA 可以签名的 PEM 编码的 CSR 文件。
点击下一步 。
在上传证书链 字段中,点击浏览 。
上传带有
.crt扩展名的已签名证书文件。点击激活 。
gcloud
gcloud privateca subordinates activate SUBORDINATE_CA_ID \
--pool=SUBORDINATE_POOL_ID \
--location=LOCATION \
--pem-chain ./chain.crt
替换以下内容:
- SUBORDINATE_CA_ID:您要激活的从属 CA 的唯一标识符。
- SUBORDINATE_POOL_ID:包含从属 CA 的 CA 池的名称。
- LOCATION:CA 池的位置。如需查看完整的位置列表,请参阅位置。
需要 --pem-chain 标志。此标志用于指定包含 PEM 编码的证书列表的文件。证书列表以当前 CA 证书开头,以根 CA 证书结尾。
如需详细了解 gcloud privateca subordinates activate 命令,请参阅 gcloud privateca subordinates activate。
上传已签名证书后,系统会返回以下语句:
Activated certificate authority [SUBORDINATE_CA_ID].
Terraform
- 将已签名的 CA 证书本地保存为
subordinate.crt。 - 将签名者 CA 证书本地保存为
rootCA.crt。 - 移除第一步中提到的用于提取 CSR 的配置,因为它尝试提取在 CA 激活后不允许提取的 CSR。
使用以下字段更新从属 CA 配置,然后运行
terraform apply。pem_ca_certificate = file("subordinate.crt") subordinate_config { pem_issuer_chain { pem_certificates = [file("rootCA.crt")] } }
如果颁发者链包含多个 CA,请将值指定为
[file("intermediateCA.cert"), file("rootCA.crt")]。