Normalmente, com a comunicação HTTPS, a autenticação funciona apenas de uma maneira: o cliente verifica a identidade do servidor.
Para aplicativos que exigem que o balanceador de carga autentique a identidade dos clientes que se conectam a ele, use o TLS mútuo (mTLS).
Com o mTLS, o balanceador de carga solicita que o cliente envie um certificado para se autenticar durante o handshake de TLS com o balanceador de carga. É possível configurar um repositório de confiança que o balanceador de carga usa para validar a cadeia de confiança do certificado do cliente.
Os seguintes balanceadores de carga de aplicativo oferecem suporte a mTLS:
- Balanceador de carga de aplicativo externo global
- Balanceador de carga de aplicativo clássico
- Balanceador de carga de aplicativo externo regional (pré-lançamento)
- Balanceador de carga de aplicativo interno regional (pré-lançamento)
- Balanceador de carga de aplicativo interno entre regiões (pré-lançamento)
Arquitetura
Os recursos a seguir são necessários para que os balanceadores de carga ofereçam suporte a uma implantação de autenticação mTLS:
Um recurso de política de TLS do servidor (ServerTLSPolicy). Permite especificar o modo TLS do lado do servidor e o recurso
TrustConfig
a ser usado ao validar certificados do cliente. As políticas de TLS do servidor são compatíveis com a autenticação mTLS. As políticas de TLS do servidor podem ser anexadas ao recurso de proxy HTTPS de destino.Um recurso
TrustConfig
. um recurso do Gerenciador de certificadosTrustConfig
contém um único recurso de armazenamento de confiança usado para validar certificados do cliente. Para mais informações, consulte Gerenciar configurações de confiança.É possível fazer upload de certificados da lista de permissões para o
TrustConfig
. Um certificado da lista de permissões sempre é considerado válido desde que seja analisável, a comprovação de posse da chave privada seja estabelecida e as restrições no campo SAN do certificado sejam atendidas. Os certificados expirados também são considerados válidos quando estão na lista de permissões.Um armazenamento confiável. Contém os certificados de autoridade de certificação (CA, na sigla em inglês) âncora de confiança e intermediários que são usados para validar a cadeia de certificados do cliente. Uma CA é usada para emitir certificados confiáveis para o cliente. A CA é identificada pelo certificado raiz da âncora de confiança do balanceador de carga ou pelos certificados de CA intermediários.
Você pode fazer o upload dos seguintes tipos de certificados do cliente para o repositório de confiança:
- Certificados emitidos por CAs de terceiros de sua escolha.
- Certificados emitidos por CAs privadas no seu controle, conforme descrito em Configurar TLS mútuo com uma CA particular.
- Certificados assinados, conforme descrito em Configurar TLS mútuo com certificados fornecidos pelo usuário.
A imagem a seguir mostra os componentes do mTLS:
global
O diagrama a seguir mostra os componentes de uma implantação do balanceador de carga de aplicativo externo. Essa arquitetura também se aplica ao balanceador de carga de aplicativo interno entre regiões, que é um balanceador de carga de aplicativo interno que usa componentes globais.
regional
O diagrama a seguir mostra os componentes de uma implantação regional do balanceador de carga de aplicativo interno. Essa arquitetura também se aplica ao balanceador de carga de aplicativo externo regional, que é um balanceador de carga de aplicativo externo que usa componentes regionais.
Para mais informações sobre os componentes de uma implantação do balanceador de carga de aplicativo, consulte as seguintes seções:
- Arquitetura (balanceadores de carga de aplicativo externos)
- Arquitetura e recursos (balanceadores de carga de aplicativo internos)
Recursos
Os recursos com suporte do mTLS para balanceadores de carga permitem fazer o seguinte:
Verifique a prova de posse da chave privada do certificado apresentado pelo cliente.
Valide certificados de cliente em um dos dois modos:
- Rejeite solicitações se não for possível validar a cadeia de certificados do cliente em relação a um armazenamento confiável.
- Transmita todas as solicitações para o back-end, mesmo que elas não forneçam um certificado de cliente.
Realize a validação do certificado do cliente em relação a uma âncora PKI enviada. Compatibilidade com a adição de várias âncoras de ICP separadamente para facilitar a migração sem inatividade de uma ICP antiga para uma nova.
Forneça outros certificados intermediários para serem usados na criação do caminho de validação em âncoras de ICP especificadas. Os certificados intermediários permitem usar mTLS com clientes que não passam em toda a cadeia de certificados.
Gere e passe uma impressão digital do certificado para o back-end como um cabeçalho de solicitação personalizado.
Transmita os campos selecionados extraídos do certificado para o back-end usando cabeçalhos de solicitação personalizados.
Transmita o resultado e os erros de validação ao back-end usando cabeçalhos de solicitação personalizados.
Para uma descrição mais detalhada do processo de validação, consulte a seção Etapas de validação do certificado do cliente nesta página.
Modos de validação do cliente MTLS
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.
Os valores de clientValidationMode
são os seguintes:
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
permite a conexão do cliente mesmo que a validação da cadeia de certificados do certificado do cliente tenha falhado ou nenhum certificado do cliente tenha sido apresentado. O comprovante de posse da chave privada é sempre verificado quando o certificado do cliente é apresentado.É possível usar variáveis de cabeçalho personalizadas com esse modo para indicar ao back-end se o cliente forneceu um certificado, se a validação do certificado foi bem-sucedida e outras informações extraídas do certificado.
REJECT_INVALID
rejeitará a conexão se um cliente não fornecer um certificado ou se a validação do certificado falhar.
É possível ver os registros para validação do certificado do cliente mTLS quando a geração de registros está ativada no serviço de back-end.
Valores de cabeçalho personalizados transmitidos para o back-end
A tabela a seguir mostra todos os valores de variáveis do cabeçalho personalizado TLS mútuo que são sempre transmitidos para o back-end (tipo de solicitação "Pass request to backend"). Os cabeçalhos personalizados são transmitidos para o back-end
quando clientValidationMode
é definido como ALLOW_INVALID_OR_MISSING_CLIENT_CERT
ou quando o certificado do cliente passa na validação do certificado.
Status do certificado do cliente | clientValidationMode | Cabeçalhos personalizados |
---|---|---|
A cadeia de certificados do cliente é muito longa (mais de 10 certificados intermediários incluídos no certificado do cliente). |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Um cliente ou um certificado intermediário tem um tamanho de chave RSA inválido. Nenhuma validação é executada. As chaves RSA podem ter de 2.048 a 4.096 bits. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Um cliente ou um certificado intermediário está usando uma curva elíptica não compatível. Nenhuma validação é executada. As curvas elípticas válidas são P-256 e P-384. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Um cliente ou certificado intermediário está usando um algoritmo não RSA, não ECDSA. Nenhuma validação é executada. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
A ICP a ser usada para validação tem mais de dez certificados intermediários que compartilham as mesmas informações sobre o sujeito e sobre a chave pública do sujeito. Nenhuma validação é executada. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Um certificado intermediário fornecido para validação tinha mais de 10 restrições de nome. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
O certificado do cliente não tem
|
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
O limite de tempo é excedido ao tentar validar a cadeia de certificados. | ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
client_cert_sha256_fingerprint: <cert hash>
|
O limite de profundidade ou iteração é atingido ao tentar validar a cadeia de certificados. A profundidade máxima de uma cadeia de certificados é dez, incluindo os certificados raiz e do cliente. O máximo de iterações é 100 (certificados examinados para validar a cadeia de certificados do cliente). |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Você configurou o mTLS sem configurar um recurso Nenhuma validação pode ser realizada, mas o hash do certificado é encaminhado para o back-end. |
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
Nenhum certificado de cliente. | ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
A validação do certificado do cliente falha no recurso TrustConfig .
|
ALLOW_INVALID_OR_MISSING_CLIENT_CERT
|
|
O certificado do cliente passa na validação do verificador do certificado. | Não relevante |
client_cert_error: <empty>
|
Erros registrados para conexões fechadas
Os erros a seguir resultam em uma conexão de cliente fechada quando clientValidationMode
é definido como ALLOW_INVALID_OR_MISSING_CLIENT_CERT
ou REJECT_INVALID
.
Para mais informações, consulte as mensagens de falha HTTP de statusDetails.
Esses erros são registrados no Cloud Logging e descritos na tabela a seguir.
Status do certificado do cliente | Solicitação | Erro registrado |
---|---|---|
O certificado do cliente falha na correspondência da assinatura durante o handshake. | Encerrar handshake de SSL | Nenhum |
O serviço não pode realizar a validação da cadeia de certificados. | Encerrar conexão |
client_cert_validation_unavailable
|
Erro interno ao validar a cadeia de certificados. | Encerrar conexão |
client_cert_validation_internal_error
|
TrustConfig não encontrado.
|
Encerrar conexão |
client_cert_trust_config_not_found
|
O payload do certificado do cliente (incluindo certificados intermediários) é muito grande (mais de 16 KB). | Encerrar conexão |
client_cert_exceeded_size_limit
|
Erros registrados com validação REJECT_INVALID
Os erros a seguir resultam em uma conexão fechada (tipo de solicitação
"Encerrar conexão") quando clientValidationMode
é
definido como REJECT_INVALID
. Para mais informações, consulte as mensagens de falha HTTP de statusDetails.
Esses erros são registrados no Cloud Logging e descritos na tabela a seguir.
Status do certificado do cliente | Erro registrado |
---|---|
A cadeia de certificados do cliente é muito longa (mais de 10 certificados intermediários incluídos no certificado do cliente). |
client_cert_chain_exceeded_limit
|
Um cliente ou um certificado intermediário tem um tamanho de chave RSA inválido. Nenhuma validação é executada. As chaves RSA podem ter de 2.048 a 4.096 bits. |
client_cert_invalid_rsa_key_size
|
Um cliente ou um certificado intermediário está usando uma curva elíptica não compatível. Nenhuma validação é executada. As curvas válidas são P-256 e P-384. |
client_cert_unsupported_elliptic_curve_key
|
Um cliente ou certificado intermediário está usando um algoritmo não RSA ou não ECDSA. Nenhuma validação é executada. |
client_cert_unsupported_key_algorithm
|
A ICP a ser usada para validação tem mais de dez certificados intermediários que compartilham as mesmas informações sobre o sujeito e sobre a chave pública do sujeito. Nenhuma validação é executada. |
client_cert_pki_too_large
|
Um certificado intermediário fornecido para validação tinha mais de 10 restrições de nome. |
|
O certificado do cliente não tem uma extensão
|
|
O limite de tempo é excedido ao tentar validar a cadeia de certificados. |
client_cert_validation_timed_out
|
O limite de profundidade ou iteração é atingido ao tentar validar a cadeia de certificados. A profundidade máxima de uma cadeia de certificados é dez, incluindo os certificados raiz e do cliente. O número máximo de iterações é 100 (certificados examinados para validar a cadeia de certificados do cliente). |
client_cert_validation_search_limit_exceeded
|
Você configurou o mTLS sem configurar um recurso TrustConfig .
|
client_cert_validation_not_performed
|
O cliente não forneceu o certificado solicitado durante o handshake. |
client_cert_not_provided
|
A validação do certificado do cliente falha com o recurso TrustConfig .
|
client_cert_validation_failed
|
Etapas de validação do certificado do cliente
Ao validar um certificado do cliente, o balanceador de carga executa as seguintes etapas:
- O balanceador de carga verifica a assinatura do cliente para provar que ele possui a chave privada do certificado do cliente. Se essa etapa falhar, o balanceador de carga sempre falhará o handshake de TLS, mesmo que sua configuração permita certificados de cliente inválidos ou ausentes e nenhuma informação seja registrada.
- Se a configuração incluir um
TrustAnchor
, o balanceador de carga verificará uma cadeia de confiança entre o certificado do cliente e oTrustAnchor
configurado. Especificamente, o balanceador de carga verifica o seguinte:- Os certificados do cliente, intermediários e raiz estão em conformidade com os requisitos de certificado.
- O campo de assunto nos certificados pai corresponde ao campo de problema nos certificados filhos.
- O identificador de chave de assunto (SKID, na sigla em inglês) do certificado pai corresponde ao identificador de chave de autoridade (AKID, na sigla em inglês) no certificado filho.
- O SAN de um certificado filho não viola o campo
NameConstraints
no certificado pai.
- Se a verificação da cadeia de confiança for bem-sucedida, a solicitação será encaminhada para o back-end com todos os cabeçalhos personalizados mTLS configurados para o endpoint.
- Se a verificação da cadeia de confiança falhar:
- Se
ClientValidationMode
estiver definido comoREJECT_INVALID
, o balanceador de carga encerrará a conexão e registrará o motivo no Cloud Logging. - Se
ClientValidationMode
estiver definido comoALLOW_INVALID_OR_MISSING_CLIENT_CERTIFICATE
, o balanceador de carga ainda encaminhará a solicitação para o back-end. É possível usar cabeçalhos de solicitação personalizados para indicar ao back-end que a validação falhou e o motivo da falha. Para balanceadores de carga de aplicativo internos entre regiões, balanceadores de carga de aplicativo externos regionais ou balanceadores de carga de aplicativo internos regionais, além de cabeçalhos de solicitação personalizados, é possível configurar o mTLS campos opcionais para verificar o motivo da falha.
- Se
Requisitos de certificado
- Os certificados precisam usar criptografia RSA ou ECDSA.
- Para certificados de cliente (folha):
- A extensão Basic Constraints não pode conter
CA=true
. - A extensão Extended Key Usage precisa conter
clientAuth
. - A extensão Extended Key Usage não pode conter os campos
codeSigning
,timeStamping
ouOCSPSigning
. - O certificado não pode estar vencido.
- O certificado do cliente não pode ser um certificado autoassinado.
- A extensão Basic Constraints não pode conter
- Para certificados raiz e intermediários:
- A extensão Basic Constraints precisa conter
CA=true
. - A extensão Key Usage precisa ser definida como
keyCertSign
. - A extensão Extended Key Usage precisa conter o campo
clientAuth
. - O certificado não pode estar vencido.
- A extensão Basic Constraints precisa conter
Limitações
O balanceador de carga não executa verificações de revogação em certificados do cliente.
Os balanceadores de carga de aplicativo permitem fazer upload de uma configuração de confiança com um único repositório de confiança que contém no máximo 100 âncoras de confiança e 100 certificados intermediários e 500 certificados na lista de permissões. Os certificados intermediários não podem ter mais de três certificados que compartilham as mesmas informações de Assunto e de Chave pública do assunto. Para mais informações, consulte Cotas e limites.
A profundidade máxima de uma cadeia de certificados é dez, incluindo os certificados raiz e do cliente. O número máximo de vezes que os certificados intermediários podem ser avaliados ao tentar criar a cadeia de confiança é 100. Para mais informações, consulte Cotas e limites.
As chaves de certificados enviadas e passadas do cliente são restritas ao seguinte:
- As chaves RSA podem ter de 2.048 a 4.096 bits. Para mais informações, consulte Cotas e limites.
- As chaves ECDSA podem usar as curvas P-256 ou P-384.
A cadeia de certificados aceitos recebida do cliente está limitada a até 16 KB e 10 certificados. Para mais informações, consulte Cotas e limites.
Os certificados raiz usados para validação não podem conter mais de 10 restrições de nome. Para mais informações, consulte Cotas e limites.
Os certificados do cliente autoassinados são sempre considerados inválidos pelo balanceador de carga.
A seguir
Configurar o TLS mútuo com certificados fornecidos pelo usuário
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