Resolver problemas de certificados SSL

Os procedimentos de solução de problemas são diferentes, dependendo se você estiver usando certificados SSL gerenciados pelo Google ou certificados SSL autogerenciados.

Resolver problemas em certificados gerenciados pelo Google

Para certificados gerenciados pelo Google, existem dois tipos de status:

  • Status gerenciado
  • Status do domínio

Status gerenciado

Para verificar o status do certificado, execute o comando a seguir:

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
    --global \
    --format="get(name,managed.status)"

Os valores para status gerenciado são os seguintes:

Status gerenciado Explicação
PROVISIONING

O certificado gerenciado pelo Google foi criado e o Google Cloud está trabalhando com a autoridade de certificação para assiná-lo.

O provisionamento de um certificado gerenciado pelo Google pode levar até 60 minutos a partir do momento em que as alterações de configuração do DNS e do balanceador de carga se propagarem pela Internet. Se você tiver atualizado a configuração de DNS recentemente, poderá levar um tempo significativo para que as alterações sejam propagadas totalmente. Às vezes, a propagação leva até 72 horas no mundo todo, mas geralmente leva algumas horas. Para saber mais sobre a propagação de DNS, consulte Propagação de alterações.

Se o certificado permanecer no estado PROVISIONING, confirme se o certificado correto está associado ao proxy de destino. Para verificar isso, execute o comando gcloud compute target-https-proxies describe ou gcloud compute target-ssl-proxies describe.

ACTIVE O certificado SSL gerenciado pelo Google é obtido da autoridade de certificação. Ele pode levar 30 minutos adicionais para ficar disponível e poder ser usado por um balanceador de carga.
PROVISIONING_FAILED É possível ver rapidamente PROVISIONING_FAILED mesmo se seu certificado estiver ACTIVE. Verifique novamente o status.

Se o status continuar PROVISIONING_FAILED o certificado gerenciado pelo Google foi criado, mas a autoridade de certificação não pode assiná-lo. Verifique se você concluiu todas as etapas em Como usar certificados SSL gerenciados pelo Google.

O Google Cloud tenta oferecer o provisionamento até ser bem-sucedido ou o status mudar para PROVISIONING_FAILED_PERMANENTLY.
PROVISIONING_FAILED_PERMANENTLY O certificado gerenciado pelo Google é criado, mas a autoridade de certificação não pode assiná-lo devido a um problema de configuração do DNS ou do balanceador de carga. Nesse estado, o Google Cloud não repete o provisionamento.

Crie um certificado de substituição SSL gerenciado pelo Google e verifique se a substituição está associada ao proxy de destino do seu balanceador de carga. Verifique ou conclua todas as etapas em Como usar certificados SSL gerenciados pelo Google. Em seguida, será possível excluir o certificado que falhou o provisionamento permanentemente.
RENEWAL_FAILED

Falha na renovação do certificado gerenciado pelo Google devido a um problema no balanceador de carga ou na configuração do DNS. Se algum dos domínios ou subdomínios em um certificado gerenciado não estiver apontando para o endereço IP do balanceador de carga usando um registro A/AAAA, o processo de renovação falhará. O certificado atual continua sendo exibido, mas expira em breve. Verifique a configuração.

Se o status permanecer RENEWAL_FAILED, provisione um novo certificado, mude para o uso do novo certificado e exclua o antigo.

Para mais informações sobre a renovação de certificados, consulte Renovação do certificado SSL gerenciado pelo Google.

Status do domínio

Para verificar o status do domínio, execute o comando a seguir:

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
    --global \
    --format="get(managed.domainStatus)"

Os valores para status de domínio estão descritos nesta tabela.

Status do domínio Explicação
PROVISIONING O certificado gerenciado pelo Google é criado para o domínio. O Google Cloud está trabalhando com a autoridade de certificação para assinar o certificado.
ACTIVE O domínio foi validado com sucesso para o provisionamento do certificado. Se o certificado SSL for para vários domínios, o certificado só poderá ser provisionado quando todos os domínios tiverem o status ACTIVE e o status gerenciado do certificado também for ACTIVE.
FAILED_NOT_VISIBLE

O provisionamento de certificado não foi concluído para o domínio. O problema pode ser:

  • O registro DNS do domínio não é resolvido para o endereço IP do balanceador de carga do Google Cloud. Para resolver esse problema, atualize os registros DNS A/AAAA de modo que apontem para o endereço IP do seu balanceador de carga.

    O DNS não pode ser resolvido para nenhum outro endereço IP a não ser do balanceador de carga. Por exemplo, se um registro A é resolvido para o balanceador de carga correto, mas o AAAA resolve para outra coisa, o status do domínio é FAILED_NOT_VISIBLE.

  • Os registros DNS A e AAAA atualizados recentemente podem levar um tempo significativo para serem totalmente propagados. Às vezes, a propagação pela Internet leva até 72 horas em todo o mundo, embora normalmente leve algumas horas. O status do domínio continua sendo FAILED_NOT_VISIBLE até que a propagação seja concluída.
  • O certificado SSL não está anexado ao proxy de destino do balanceador de carga. Para resolver esse problema, atualize a configuração do seu balanceador de carga.
  • As portas de front-end da regra de encaminhamento global não incluem a porta 443 para um balanceador de carga de rede de proxy externo com um proxy SSL. Para resolver isso, adicione uma nova regra de encaminhamento com a porta 443.
  • Um mapa de certificado do Gerenciador de certificados é anexado ao proxy de destino. O mapa de certificado anexado tem precedência e os certificados anexados diretamente são ignorados. Isso pode ser resolvido desanexando o mapa de certificados do proxy.
  • Se o status gerenciado for PROVISIONING, o Google Cloud continuará tentando provisionar, mesmo que o status do domínio seja FAILED_NOT_VISIBLE.
FAILED_CAA_CHECKING Falha no provisionamento de certificado devido a um problema de configuração no registro CAA do domínio. Verifique se você seguiu o procedimento correto.
FAILED_CAA_FORBIDDEN Falha no provisionamento de certificado devido ao registro CAA do seu domínio não especificar uma CA que o Google Cloud precisa usar. Verifique se você seguiu o procedimento correto.
FAILED_RATE_LIMITED Falha no provisionamento de certificado devido a uma autoridade de certificação ter solicitações de assinatura de certificado com limitação de taxa. É possível provisionar um novo certificado, mudar para o novo certificado e excluir o antigo ou entrar em contato com o suporte do Google Cloud.

Renovação de certificados gerenciados

Se algum dos domínios ou subdomínios em um certificado gerenciado não estiver apontando para o endereço IP do balanceador de carga, o processo de renovação falhará. Para evitar falhas na renovação, verifique se todos os domínios e subdomínios apontam para o endereço IP do balanceador de carga.

Resolver problemas de certificados SSL autogerenciados

Neste guia, descrevemos como solucionar problemas de configuração de certificados SSL autogerenciados.

Não é possível analisar o certificado

O Google Cloud exige certificados no formato PEM. Se o certificado estiver no formato PEM, verifique o seguinte:

Para validar seu certificado, use o seguinte comando OpenSSL, substituindo CERTIFICATE_FILE pelo caminho para o arquivo do seu certificado:

openssl x509 -in CERTIFICATE_FILE -text -noout

Se o OpenSSL não puder analisar seu certificado:

Nome comum ou nome alternativo do assunto ausente

O Google Cloud exige que seu certificado tenha um nome comum (CN) ou um nome alternativo do assunto (SAN). Consulte Criar um CSR para mais informações.

Quando ambos os atributos estiverem ausentes, o Google Cloud exibirá uma mensagem de erro como esta, ao se tentar criar um certificado autogerenciado:

ERROR: (gcloud.compute.ssl-certificates.create) Could not fetch resource:
 -   The SSL certificate is missing a Common Name(CN) or Subject Alternative
   Name(SAN).

Não é possível analisar a chave privada

O Google Cloud exige chaves privadas no formato PEM que atendam aos critérios de chave privada.

Você pode validar sua chave privada usando o seguinte comando OpenSSL, substituindo PRIVATE_KEY_FILE pelo caminho para sua chave privada:

    openssl rsa -in PRIVATE_KEY_FILE -check

As respostas a seguir indicam um problema com a chave privada:

  • unable to load Private Key
  • Expecting: ANY PRIVATE KEY
  • RSA key error: n does not equal p q
  • RSA key error: d e not congruent to 1
  • RSA key error: dmp1 not congruent to d
  • RSA key error: dmq1 not congruent to d
  • RSA key error: iqmp not inverse of q

Para corrigir esse problema, crie uma nova chave privada e um certificado.

Chaves privadas com senha longa

Se o OpenSSL solicitar uma senha longa, será preciso removê-la da sua chave privada antes de usá-la com o Google Cloud. Use o seguinte comando OpenSSL:

openssl rsa -in PRIVATE_KEY_FILE \
    -out REPLACEMENT_PRIVATE_KEY_FILE

Substitua os marcadores por valores válidos:

  • PRIVATE_KEY_FILE: o caminho para a chave privada protegida com uma senha longa
  • REPLACEMENT_PRIVATE_KEY_FILE: o caminho em que você quer salvar uma cópia da chave privada de texto simples.

Certificados intermediários expirados

Se um certificado intermediário expirar antes do certificado do servidor (folha), isso poderá indicar que sua CA não está seguindo as práticas recomendadas.

Quando um certificado intermediário expira, seu certificado de folha usado no Google Cloud pode se tornar inválido. Isso depende do cliente SSL, como descrito a seguir:

  • Alguns clientes SSL só analisam o tempo de expiração do certificado folha e ignoram os certificados intermediários expirados.
  • Alguns clientes SSL tratam como inválida uma cadeia com certificados intermediários expirados e exibem um aviso.

Para resolver o problema:

  1. Aguarde a CA alternar para um novo certificado intermediário.
  2. Solicite um novo certificado.
  3. Faça um outro upload do novo certificado com as novas chaves.

Sua CA também pode permitir a assinatura cruzada para certificados intermediários. Verifique com sua CA para confirmar.

O expoente público RSA é muito grande

A seguinte mensagem de erro aparece quando o expoente público RSA é maior que 65537. Use 65537, conforme especificado na RFC 4871.

ERROR: (gcloud.compute.ssl-certificates.create) Could not fetch resource:
 -   The RSA public exponent is too large.

Remover certificado SSL do proxy de destino

Confira nas etapas a seguir como remover um único certificado SSL anexado ao proxy HTTPS de destino:

  1. Exporte o proxy HTTPS de destino para um arquivo temporário.

    gcloud compute target-https-proxies export TARGET_PROXY_NAME > /tmp/proxy
    
  2. Edite o arquivo /tmp/proxy e remova as linhas a seguir:

    sslCertificates:
    -   https://www.googleapis.com/compute/v1/projects/...
    
  3. Importe o arquivo /tmp/proxy.

    gcloud compute target-https-proxies import TARGET_PROXY_NAME \
       --source=/tmp/proxy
    
  4. Opcional: exclua o certificado SSL.

    gcloud compute ssl-certificates delete SSL_CERT_NAME
    

Substitua:

  • TARGET_PROXY_NAME: o nome do recurso do proxy HTTPS de destino.
  • SSL_CERT_NAME: o nome do certificado SSL.