Nesta página, fornecemos instruções para criar um certificado raiz e um certificado intermediário assinado e fazer upload desses certificados para um recurso TrustConfig
do Gerenciador de certificados. Se você já tiver certificados para fazer upload, pule as etapas a seguir para criar novos certificados.
Você também cria os recursos de segurança de rede necessários para configurar o TLS mútuo (mTLS) para balanceadores de carga de aplicativos. Nas instruções, usamos o OpenSSL para criar os certificados raiz e intermediários.
Antes de começar
- Leia a Visão geral do TLS mútuo.
- Consulte Gerenciar configurações de confiança.
Instale a Google Cloud CLI. Para uma visão geral completa da ferramenta, consulte Visão geral da CLI gcloud. Encontre os comandos relacionados ao balanceamento de carga na referência da CLI gcloud e da API.
Se você não executou a gcloud CLI anteriormente, primeiro execute o comando
gcloud init
para autenticar.Ative as APIs: API Compute Engine, API Certificate Manager, API Network Security e API Network Services.
Definir o projeto.
gcloud
gcloud config set project PROJECT_ID
Permissões
Para ter as permissões necessárias para concluir este guia, peça ao administrador para conceder a você os papéis do IAM a seguir no projeto:
- Para criar recursos do balanceador de carga, como
TargetHTTPSProxy
: Administrador do balanceador de carga do Compute (roles/compute.loadBalancerAdmin
) - Para usar os recursos do Gerenciador de certificados:
Proprietário do Gerenciador de certificados (
roles/certificatemanager.owner
) -
Para criar componentes de segurança e rede:
Administrador de rede do Compute (
roles/compute.networkAdmin
) e Administrador de segurança do Compute (roles/compute.securityAdmin
) - Para criar um projeto (opcional):
Criador de projetos (
roles/resourcemanager.projectCreator
)
Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.
Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.
Gere uma chave e certificados assinados
Esta seção usa comandos openssl
para criar certificados raiz e intermediários.
Use os comandos a seguir para gerar um certificado raiz e um certificado intermediário assinado com campos keyUsage
e extendedKeyUsage
válidos.
Crie um arquivo de amostra
example.cnf
com a configuração mínima necessária para criar certificados de assinatura válidos. É possível editar esse arquivo para definir campos adicionais nesses certificados.cat > example.cnf << EOF [req] distinguished_name = empty_distinguished_name [empty_distinguished_name] # Kept empty to allow setting via -subj command line arg. [ca_exts] basicConstraints=critical,CA:TRUE keyUsage=keyCertSign extendedKeyUsage=clientAuth EOF
Crie o certificado raiz.
openssl req -x509 \ -new -sha256 -newkey rsa:2048 -nodes \ -days 3650 -subj '/CN=root' \ -config example.cnf \ -extensions ca_exts \ -keyout root.key -out root.cert
Crie a solicitação de assinatura do certificado intermediário.
openssl req \ -new -sha256 -newkey rsa:2048 -nodes \ -subj '/CN=int' \ -config example.cnf \ -extensions ca_exts \ -keyout int.key -out int.req
Crie o certificado intermediário.
openssl x509 -req \ -CAkey root.key -CA root.cert \ -set_serial 1 \ -days 3650 \ -extfile example.cnf \ -extensions ca_exts \ -in int.req -out int.cert
Gerar um certificado da lista de permissões
Esta seção usa comandos openssl
para criar uma amostra de certificado
da lista de permissões.
Use os seguintes comandos para gerar um certificado da lista de permissões.
openssl req -x509 \
-new -sha256 -newkey rsa:2048 -nodes \
-days 3650 -subj '/CN=localhost' \
-keyout allowlisted.key -out allowlisted.cert
Formatar os certificados
Para incluir certificados novos ou atuais em um TrustStore
, formate os certificados em uma única linha e armazene-os em variáveis de ambiente para que possam ser lidos no arquivo YAML. Use os seguintes comandos para formatar os certificados e armazená-los em variáveis de ambiente:
export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
Para incluir certificados da lista de permissões novos ou atuais em uma configuração de confiança, formate os certificados em uma única linha e armazene-os em variáveis de ambiente para que possam ser lidos no arquivo YAML. Use os seguintes comandos para formatar os certificados e armazená-los em variáveis de ambiente:
export ALLOWLISTED_CERT=$(cat allowlisted.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
Criar um recurso TrustConfig
Crie um recurso TrustConfig
do Gerenciador de certificados
que represente sua ICP. Este exemplo de recurso TrustConfig
contém um
armazenamento de confiança com duas âncoras de confiança e dois certificados de CA intermediários.
Ele lê o conteúdo do certificado das variáveis de ambiente criadas na etapa anterior Formatar os certificados.
Para criar um repositório de confiança com âncoras de confiança adicionais ou certificados de CA
intermediários, adicione linhas de pemCertificate
na seção apropriada. Se você tiver
menos âncoras de confiança ou certificados de CA intermediários, remova as linhas
desnecessárias.
Este exemplo de recurso TrustConfig
contém um certificado na lista de permissões.
Especifique vários certificados na lista de permissões usando várias instâncias
do campo pemCertificate
.
Nas etapas a seguir, substitua TRUST_CONFIG_NAME
pelo nome do recurso TrustConfig
:
Para criar o arquivo
trust_config.yaml
com um repositório de confiança, use o seguinte comando:cat << EOF > trust_config.yaml trustStores: - trustAnchors: - pemCertificate: "${ROOT_CERT?}" - pemCertificate: "${ROOT_CERT_2?}" intermediateCas: - pemCertificate: "${INTERMEDIATE_CERT?}" - pemCertificate: "${INTERMEDIATE_CERT_2?}" EOF
Opcional: para criar o arquivo
trust_config.yaml
com um certificado na lista de permissões, use o seguinte comando:cat << EOF > trust_config.yaml allowlistedCertificates: - pemCertificate: "${ALLOWLISTED_CERT?}" EOF
Para criar os recursos
TrustConfig
do Gerenciador de certificados, use o comandogcloud certificate-manager trust-configs import
:global
Para balanceadores de carga de aplicativo externos e balanceadores de carga de aplicativo internos entre regiões, use este comando:
gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml
regional
Use este comando para balanceadores de carga de aplicativo externos regionais e balanceadores de carga de aplicativo internos regionais:
gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=REGION
Criar os recursos de segurança de rede
Uma política de TLS do servidor (recurso de segurança de rede ServerTLSPolicy
) permite especificar o modo TLS do lado do servidor e o recurso TrustConfig
a ser usado ao validar certificados de cliente. Quando o cliente apresenta um certificado
inválido ou nenhum certificado para o balanceador de carga, o
clientValidationMode
especifica como a conexão do cliente é processada.
- Quando
clientValidationMode
é definido comoALLOW_INVALID_OR_MISSING_CLIENT_CERT
, todas as solicitações são transmitidas para o back-end, mesmo que a validação falhe ou o certificado do cliente esteja ausente. - Quando
clientValidationMode
for definido comoREJECT_INVALID
, somente as solicitações que fornecerem um certificado de cliente que possa ser validado por um recursoTrustConfig
serão transmitidas para o back-end.
Para criar o recurso ServerTLSPolicy
, conclua as etapas a seguir:
Com base em como você quer lidar com a conexão, selecione uma das opções a seguir.
Nas etapas a seguir, substitua
SERVER_TLS_POLICY_NAME
pelo nome da política de TLS do servidor ePROJECT_ID
pelo ID do projeto do Google Cloud.Opção 1:
clientValidationMode
está definido comoALLOW_INVALID_OR_MISSING_CLIENT_CERT
.Para criar o arquivo
server_tls_policy.yaml
, use o seguinte comando:global
Para balanceadores de carga de aplicativo externos e internos entre regiões, use o comando:
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
regional
Use o comando para balanceadores de carga de aplicativo externos regionais e balanceadores de carga de aplicativo internos regionais:
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
Opção 2:
clientValidationMode
está definido comoREJECT_INVALID
.Para criar o arquivo
server_tls_policy.yaml
, use o seguinte comando:global
Para balanceadores de carga de aplicativo externos e internos entre regiões, use o comando:
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
regional
Use o comando para balanceadores de carga de aplicativo externos regionais e balanceadores de carga de aplicativo internos regionais:
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
Para criar o recurso
ServerTlsPolicy
, use o comandogcloud network-security server-tls-policies import
:global
Para balanceadores de carga de aplicativo externos e internos entre regiões, use o comando:
gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=global
regional
Use o comando para balanceadores de carga de aplicativo externos regionais e balanceadores de carga de aplicativo internos regionais:
gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=REGION
Para mais informações, consulte Modos de validação de cliente MTLS.
Assinar uma chave de cliente com o certificado intermediário
Nesta seção, fornecemos uma opção de configuração adicional para gerar um certificado de folha.
Se você já criou um recurso TrustConfig usando certificados intermediários (int.cert
e int.key
), use as instruções a seguir:
Crie um arquivo de configuração de chave de cliente.
cat > client.config << EOF [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements prompt = no [extension_requirements] basicConstraints = critical, CA:FALSE keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth [dn_requirements] countryName = US stateOrProvinceName = California localityName = San Francisco 0.organizationName = example organizationalUnitName = test commonName = test.example.com emailAddress = test@example.com EOF
Se você quiser ter uma identidade SPIFFE anexada:
Adicione um
subjectAltName
à seção[extension_requirements]
conforme a seguir:subjectAltName = @sans_list
Adicione uma nova seção na parte de baixo do arquivo
client.config
com isto:[sans_list] URI.1 = spiffe://example.com/test-identity
Assine a chave.
openssl req -new -keyout client.key -out client.csr -config client.config openssl x509 -req -in client.csr -out client.cert -extfile client.config -extensions extension_requirements -days 365 -CA int.cert -CAkey int.key
Para testar, envie uma solicitação
curl
para o endereço IP do balanceador de carga.curl -v -k --key client.key --cert client.cert https://IP_ADDRESS
Substitua IP_ADDRESS pelo endereço IP do balanceador de carga.
A seguir
- Configurar o TLS mútuo para um balanceador de carga de aplicativo externo global
- Configurar o TLS mútuo para um balanceador de carga de aplicativo clássico
- Configurar o TLS mútuo para um balanceador de carga de aplicativo interno
- Configurar o TLS mútuo para um balanceador de carga de aplicativo externo
- Configurar o TLS mútuo com uma CA particular