本页面介绍了如何使用 Certificate Authority Service 创建私有证书授权机构 (CA) 并将证书上传到 Certificate Manager TrustConfig
资源。
您还将创建为应用负载均衡器配置双向 TLS 所需的网络安全资源。
准备工作
- 查看双向 TLS 概览。
安装 Google Cloud CLI。如需全面了解此工具,请参阅 gcloud CLI 概览。您可以在 API 和 gcloud CLI 参考文档中找到与负载均衡相关的命令。
如果您之前未运行过 gcloud CLI,请先运行
gcloud init
进行身份验证。确保您了解如何创建 CA 池。
权限
如需获得完成本指南所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
-
Compute Load Balancer Admin (
roles/compute.loadBalancerAdmin
)(如需创建负载均衡器资源,例如TargetHTTPProxy
) -
Certificate Manager Owner (
roles/certificatemanager.owner
)(如需使用 Certificate Manager 资源) -
Compute Network Admin (
roles/compute.networkAdmin
) 和 Compute Security Admin (roles/compute.securityAdmin
)(如需创建安全和网络组件) -
Project Creator (
roles/resourcemanager.projectCreator
)(如需创建项目 [可选])
如需详细了解如何授予角色,请参阅管理访问权限。
创建私有 CA
使用 CA Service 创建私有 CA,然后创建根证书:
如需创建 CA 池,请使用
gcloud privateca pools create
命令:gcloud privateca pools create CA_POOL \ --location=us-central1
将
CA_POOL
替换为父级 CA 池的 ID 或名称。如需在 CA 池中创建私有 CA,请使用
gcloud privateca roots create
命令:gcloud privateca roots create CA_ROOT \ --pool=CA_POOL \ --subject="CN=my-ca, O=Test LLC" \ --location=us-central1
请替换以下内容:
CA_ROOT
:私有 CA 的 ID 或名称CA_POOL
:父级 CA 池的 ID 或名称
如需描述新 CA 并创建
root.cert
文件,请使用gcloud privateca roots describe
命令:gcloud privateca roots describe CA_ROOT \ --pool=CA_POOL \ --location=us-central1 \ --format='value(pemCaCertificates)' > root.cert
export ROOT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
请替换以下内容:
CA_ROOT
:私有 CA 的 ID 或名称CA_POOL
:父级 CA 池的 ID 或名称
详情请参阅以下内容:
使用私有 CA 创建 TrustConfig
使用通过私有 CA 生成的根证书创建代表 PKI 的 Certificate Manager TrustConfig
资源。我们假设 TrustConfig
资源是一个简单的受信任证书存储区,它具有一个表示根证书的信任锚。
在以下步骤中,将 TRUST_CONFIG_NAME
替换为 TrustConfig
资源的名称。
要创建
trust_config.yaml
文件,请使用以下命令:cat << EOF > trust_config.yaml name: TRUST_CONFIG_NAME trustStores: - trustAnchors: - pemCertificate: "${ROOT?}" EOF
如需创建 Certificate Manager
TrustConfig
资源,请使用gcloud certificate-manager trust-configs import
命令:gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=REGION
替换以下内容:
REGION
:将global
用于跨区域内部应用负载均衡器、全球外部应用负载均衡器或传统应用负载均衡器。对于区域级外部应用负载均衡器或区域级内部应用负载均衡器,请使用您在其中配置了负载均衡器的区域。
创建网络安全资源
借助服务器 TLS 政策(ServerTLSPolicy
网络安全资源),您可以指定在验证客户端证书时使用的服务器端 TLS 模式和 TrustConfig
资源。当客户端向负载均衡器提供无效证书或没有证书时,clientValidationMode
指定客户端连接的处理方式。
- 当
clientValidationMode
设置为ALLOW_INVALID_OR_MISSING_CLIENT_CERT
时,即使验证失败或缺少客户端证书,所有请求都会传递给后端。 - 当
clientValidationMode
设置为REJECT_INVALID
时,只有提供能够针对TrustConfig
资源进行验证的客户端证书的请求才会传递给后端。
如需创建 ServerTLSPolicy
资源,请完成以下步骤:
根据您希望处理连接的方式,选择以下选项之一。
在以下步骤中,将
SERVER_TLS_POLICY_NAME
替换为服务器 TLS 政策的名称,并将PROJECT_ID
替换为您的 Google Cloud 项目的 ID。方法 1:
clientValidationMode
设置为ALLOW_INVALID_OR_MISSING_CLIENT_CERT
。要创建
server_tls_policy.yaml
文件,请使用以下命令:全局
对于外部应用负载均衡器和跨区域内部应用负载均衡器,请使用以下命令:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME EOF
区域级
对于区域级外部应用负载均衡器和区域级内部应用负载均衡器,请使用以下命令:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME EOF
方法 2:将
clientValidationMode
设置为REJECT_INVALID
。要创建
server_tls_policy.yaml
文件,请使用以下命令:全局
对于外部应用负载均衡器和跨区域内部应用负载均衡器,请使用以下命令:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: REJECT_INVALID clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME EOF
区域级
对于区域级外部应用负载均衡器和区域级内部应用负载均衡器,请使用以下命令:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: REJECT_INVALID clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME EOF
如需创建
ServerTlsPolicy
资源,请使用gcloud network-security server-tls-policies import
命令:全局
对于外部应用负载均衡器和跨区域内部应用负载均衡器,请使用以下命令:
gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=global
区域级
对于区域级外部应用负载均衡器和区域级内部应用负载均衡器,请使用以下命令:
gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=REGION
如需了解详情,请参阅 MTLS 客户端验证模式。