Proteger domínios personalizados com SSL

O suporte de SSL do App Engine oferece pontos finais SSL distribuídos globalmente e equilíbrio de carga incorporado para publicar a sua app de forma segura, fiável e rápida para um público-alvo mundial.

Por predefinição, as ligações HTTPS no seu domínio personalizado são ativadas automaticamente através de certificados SSL geridos. Depois de mapear um domínio personalizado para a sua aplicação e atualizar os registos DNS, o App Engine aprovisiona um certificado SSL gerido, renova o certificado e revoga-o quando remove o domínio personalizado da sua aplicação.

Antes de começar

  • Certifique-se de que já configurou o seu domínio personalizado no projeto do App Engine.

  • Se usar o Cloud Load Balancing e os NEGs sem servidor para encaminhar tráfego para a sua app do App Engine, recomendamos que mapeie o seu domínio personalizado para o balanceador de carga em vez de diretamente para a sua app e use certificados SSL criados para o balanceador de carga. Isto elimina a necessidade de gerir certificados SSL separados para cada app sem servidor. Além disso, com o Cloud Load Balancing, pode definir políticas SSL que controlam as funcionalidades de SSL que o seu balanceador de carga negoceia com os clientes. Para mais informações, consulte as seguintes páginas:

    Tenha em atenção a seguinte limitação:

    • Recomendamos que use controlos de entrada para que a sua app apenas receba pedidos enviados a partir do equilibrador de carga (e da VPC, se a usar). Caso contrário, os utilizadores podem usar o URL do App Engine da sua app para contornar o balanceador de carga, as políticas de segurança do Cloud Armor, os certificados SSL e as chaves privadas que são transmitidas através do balanceador de carga.

Valide um certificado gerido

Depois de configurar o seu domínio personalizado e atualizar os registos DNS, é fornecido automaticamente um certificado SSL gerido no espaço de alguns minutos. A seleção da autoridade de certificação é automática. O certificado gerido é assinado pelo Google Trust Services (GTS) ou pela Let's Encrypt.

Para verificar se o certificado foi aprovisionado:

  1. Na Google Cloud consola, aceda a App Engine > Definições > Domínios personalizados:

    Aceda a Domínios personalizados

  2. A segurança SSL é apresentada como gerida pela Google.

Resolva problemas de certificados SSL geridos

  • Pode ter de atualizar os registos de DNS do seu domínio personalizado para validar o nome do domínio. O App Engine não pode aprovisionar certificados para domínios não validados.

  • Pode verificar o estado do seu certificado com a API Admin através de um AuthorizedCertificate.GET request.

  • Se um certificado gerido não tiver sido aprovisionado porque os registos DNS não estão disponíveis, o campo ManagedCertificate.ManagementStatus pode ser FAILED_RETRYING_NOT_VISIBLE. Verifique se os seus registos de DNS estão atualizados, aguarde alguns minutos e, em seguida, tente novamente. Os registos DNS podem demorar até 24 horas a ficar disponíveis.

  • Se o estado for FAILED_PERMANENT, significa que todas as tentativas de renovação falharam. Verifique as definições de DNS e, em seguida, atualize o mapeamento do domínio personalizado seguindo os passos para atualizar para certificados SSL geridos.

Atualize para certificados SSL geridos

Antes de atualizar para certificados SSL geridos pela Google, tenha em atenção que os certificados geridos não suportam mapeamentos com carateres universais.

Se estiver a usar subdomínios e o certificado for emitido pela Let's Encrypt, existe um limite de 50 certificados geridos por semana para cada domínio base. Se atingir o limite, o App Engine continua a tentar emitir certificados geridos até que todos os pedidos sejam cumpridos.

Para mudar dos seus próprios certificados SSL para certificados SSL geridos pela Google ou para adicionar certificados SSL geridos a uma app existente com um domínio personalizado, atualize o mapeamento de domínios:

  1. Na Google Cloud consola, aceda a App Engine > Definições > Domínios personalizados:

    Aceda a Domínios personalizados

  2. Selecione o domínio que quer proteger e clique em Ativar segurança gerida.

Desative os certificados SSL geridos

Para desativar os certificados SSL geridos:

  1. Na Google Cloud consola, aceda a App Engine > Definições > Domínios personalizados:

    Aceda a Domínios personalizados

  2. Selecione o domínio e clique em Desativar segurança gerida.

Use os seus próprios certificados SSL

Em vez de usar certificados SSL geridos, pode usar o seu próprio certificado. Se o seu certificado não tiver uma prova de transparência, a sua app pode apresentar avisos SSL no Chrome devido à aplicação da prova de transparência de certificados. Para mais informações sobre as provas de Transparência de certificados e como agir em conformidade, leia o artigo Aplicação da Transparência de certificados.

Para usar e gerir os seus próprios certificados SSL em vez dos certificados geridos pela Google:

  1. Certifique-se de que já configurou o seu domínio personalizado no seu projeto do App Engine.

  2. Desative os certificados geridos pela Google predefinidos.

  3. Obtenha um certificado para o seu domínio junto da autoridade de certificação (AC) da sua escolha. O procedimento exato pode variar consoante a autoridade, mas consulte o artigo Obter um certificado para ver os passos típicos.

  4. Converta os ficheiros de chave privada e certificado SSL em formatos suportados pelo App Engine. Antes de poder carregar os seus ficheiros, a chave privada tem de ser convertida numa chave privada RSA e os certificados SSL têm de ser concatenados num único ficheiro. Para mais informações, consulte o artigo Converta as suas chaves privadas e concatene os seus certificados SSL.

  5. Certifique-se de que tem as autorizações certas na Google Cloud consola e a propriedade validada (passo 3) de todos os domínios relacionados ou dos respetivos domínios principais. Por exemplo:

    • Se o certificado for para www.example.com, pode validar a propriedade de www.example.com ou example.com.
    • Se o certificado for para www.example.com e sub.example.com, pode validar a propriedade de www.example.com e sub.example.com ou de example.com.
    • Se o certificado for para *.example.com, tem de validar a propriedade de example.com.
  6. Carregue a chave privada e o certificado SSL e, de seguida, mapeie o seu domínio para a sua app:

    1. Na Google Cloud consola, aceda a App Engine > Definições > Certificados SSL:

      Aceda a Certificados SSL

    2. Clique em Carregar um novo certificado.

    3. Carregue o certificado SSL concatenado em PEM encoded X.509 public key certificate, por exemplo concat.crt e, em seguida, carregue a chave privada RSA em Chave privada RSA codificada em PEM não encriptada, por exemplo myserver.key.pem.
    4. Clique em Carregar. Cada certificado SSL que carregar fica visível e disponível para utilização por todos os seus outros Google Cloud projetos, pelo que não tem de carregar o mesmo certificado repetidamente.
    5. Selecione o certificado que quer atribuir a um domínio e, de seguida, clique em Guardar para usar SSL para esse domínio.

  7. Teste as alterações visitando o seu domínio no navegador, usando, por exemplo, https, https://www.example.com.

Transfira mapeamentos de um certificado de publicação para um novo certificado

Quando um certificado se aproxima da data de validade, tem de carregar um novo certificado e transferir os mapeamentos existentes do certificado antigo para esse novo certificado. O procedimento seguinte pressupõe que o certificado existente ainda não expirou e está atualmente a servir o seu domínio personalizado.

Para transferir mapeamentos de um certificado em serviço ativo:

  1. Obtenha um novo certificado para o seu domínio da autoridade de certificação (AC) da sua escolha. Consulte o artigo Obter um certificado para ver os passos típicos.

  2. Converta os ficheiros de chave privada e certificado SSL em formatos suportados pelo App Engine. Para mais detalhes, consulte o artigo Converta as suas chaves privadas e concatene os seus certificados SSL.

  3. Carregue a chave privada RSA e o certificado SSL concatenado:

    1. Carregue o certificado SSL na página Certificados SSL.

      Aceda a Certificados SSL
      1. Clique em Carregar um novo certificado.

      2. Carregue o certificado SSL concatenado em Certificado de chave pública X.509 codificado em PEM, por exemplo, concat.crt, e, em seguida, carregue a chave privada RSA em Chave privada RSA codificada em PEM não encriptada, por exemplo, myserver.key.pem.
      3. Clique em Carregar.
    2. Selecione o novo certificado que acabou de adicionar na lista de certificados e, de seguida, selecione o domínio que está a ser publicado pelo certificado antigo.
    3. Clique em Guardar para transferir os mapeamentos do certificado antigo para o novo.

Obtenha um certificado

O processo de obtenção de um certificado SSL varia consoante a autoridade de certificação que usar. As instruções fornecidas aqui podem ter de ser ligeiramente ajustadas. Normalmente, cada autoridade de certificação fornece instruções para ajudar no processo.

Para obter um certificado para utilização com a sua app do App Engine:

  1. Gere a sua chave privada e um pedido de assinatura de certificado (CSR) através da ferramenta openssl:

    1. Execute o seguinte comando a partir de um diretório onde quer criar o ficheiro server.csr:

      openssl req -nodes -newkey rsa:2048 -keyout [MY_PRIVATE_KEY].key -out [MY_CSR].csr
      

      where:

      • [MY_PRIVATE_KEY].key é o ficheiro gerado onde a sua chave privada está armazenada. Exemplo: myserver.key
      • [MY_CSR].csr é o ficheiro gerado para o seu pedido de assinatura de certificado. Exemplo: server.csr
    2. Quando lhe for pedido, introduza as seguintes informações:

      • O código do país de 2 dígitos, por exemplo, US para os Estados Unidos.
      • O nome da sua cidade.
      • O nome da sua empresa. Pode usar o seu próprio nome se não tiver uma empresa.
      • A sua unidade organizacional ou NA se não tiver esta opção.
      • Um nome comum que representa o seu domínio, por exemplo: www.example.com
      • O seu endereço de email.

      Não precisa de fornecer nenhum dos outros valores, pois são todos opcionais.

  2. Determine que autoridade de certificação é adequada para si e, em seguida, compre um certificado. Por exemplo, pode usar: SSLMate, Thawte, Comodo ou qualquer outra autoridade de certificação.

    Para ver detalhes sobre os tipos de certificados suportados, consulte o artigo Suporte do App Engine para certificados SSL.

  3. Quando a sua AC solicitar o conteúdo do ficheiro CSR, siga as instruções para copiar e colar o conteúdo do ficheiro .csr que gerou anteriormente, por exemplo, server.csr.

  4. Siga as instruções quando a AC pedir a aprovação do proprietário do domínio.

  5. Depois de fornecer a aprovação do proprietário do domínio, a AC envia-lhe o certificado, que é normalmente um ficheiro ZIP. Descompacte esse ficheiro para um diretório de trabalho para poder concatenar esses certificados para carregamento no App Engine.

Converta chaves privadas e concatene certificados SSL

Tem de converter a sua chave privada numa chave privada RSA e concatenar todos os seus certificados SSL antes de carregar a chave privada e os certificados SSL para o App Engine.

  1. Converta o ficheiro de chave privada que gerou anteriormente numa chave privada RSA não encriptada. Por exemplo, pode executar o seguinte comando openssl rsa:

    openssl rsa -in [MY_PRIVATE_KEY].key -out [MY_RSA_KEY].key.pem
    

    where:

    • [MY_PRIVATE_KEY].key é o ficheiro gerado que contém a sua chave privada armazenada. Exemplo: myserver.key
    • [MY_RSA_KEY].key é o ficheiro gerado que contém a chave privada RSA não encriptada. Exemplo: myserver.key.pem

      Exemplo:

      openssl rsa -in myserver.key -out myserver.key.pem
      
  2. Concatene todos os ficheiros .crt da sua AC num único ficheiro através do seguinte comando:

    cat [MY_DOMAIN_CERT].crt [MY_SecureServerCA].crt [MY_TrustCA].crt [MY_TrustExternalCARoot].crt > [MY_CONCAT_CERT].crt
    

    onde

    • O [MY_DOMAIN_CERT].crt é o certificado para o seu domínio. Exemplo: www_example_com.crt
    • [MY_SecureServerCA].crt, [MY_TrustCA].crt e [MY_TrustExternalCARoot].crt são os outros ficheiros de certificado fornecidos pela CA.
    • [MY_CONCAT_CERT].crt é o ficheiro concatenado que contém todos os ficheiros de certificado .crt da sua CA. Exemplo: concat.crt

      Exemplo:

      cat www_example_com.crt AddTrustExternalCARoot.crt RSADomainValidationSecureServerCA.crt RSAAddTrustCA.crt > concat.crt
      
  3. Valide o seu certificado SSL e chave privada:

    1. Para verificar se a chave privada e o certificado correspondem, pode usar os comandos openssl x509 e openssl rsa. Exemplos:

      openssl x509 -noout -modulus -in concat.crt | openssl md5
      openssl rsa -noout -modulus -in myserver.key.pem | openssl md5
      

      Os comandos openssl x509 e openssl rsa devem devolver a mesma saída.

    2. Para verificar se um certificado e a respetiva cadeia de AC são válidos, pode usar o comando openssl verify. Por exemplo:

      openssl verify -verbose -CAfile concat.crt concat.crt
      
  4. Quando tiver tudo pronto, pode carregar a chave privada RSA e os certificados concatenados para o App Engine.

Suporte do App Engine para certificados SSL

O App Engine suporta os seguintes tipos de certificados:

  • Domínio/nome do anfitrião único
  • Autoassinado
  • Caráter universal
  • Nome alternativo do requerente (SAN) / vários domínios

Requer algumas coisas dos seus certificados e chaves:

  • A chave privada e o certificado devem ser carregados no formato PEM.
  • As chaves privadas não podem ser encriptadas.
  • Um ficheiro de certificado pode conter, no máximo, cinco certificados. Este número inclui certificados encadeados e intermédios.
  • Todos os nomes de assunto no certificado de anfitrião devem corresponder ou ser subdomínios dos domínios validados do utilizador.
  • As chaves privadas têm de usar encriptação RSA.
  • Módulo da chave máximo permitido: 2048 bits

Se o certificado de anfitrião exigir um certificado intermédio ou encadeado, como emitem muitas autoridades de certificação (ACs), tem de anexar os certificados intermédios ou encadeados ao final do ficheiro de certificado público.

Algumas funcionalidades do App Engine usam subdomínios especiais. Por exemplo, uma aplicação pode usar subdomínios para aceder a serviços de aplicações ou a diferentes versões da sua aplicação. Para os usar com SSL, é sensato configurar um certificado SAN ou de caráter universal. Os certificados com carateres universais só suportam um nível de subdomínio.

Remova certificados SSL personalizados

Para deixar de usar um certificado SSL personalizado, siga estes passos:

  1. Na Google Cloud consola, aceda à página Definições de certificados SSL do App Engine.

    Aceda às definições do certificado SSL

  2. Clique no certificado que quer remover do seu domínio.

  3. Desmarque o nome do domínio para o qual já não quer usar o certificado SSL e, de seguida, clique em Guardar.

Use cabeçalhos Strict-Transport-Security

Por motivos de segurança, todas as aplicações devem incentivar os clientes a usar ligações https. Para instruir o navegador a preferir https em vez de http, use o cabeçalho Strict-Transport-Security.

Veja as cifras e as versões do TLS ativadas

  1. Instale o nmap Network Mapper no seu computador, se ainda não estiver disponível. Consulte https://nmap.org/ para ver as instruções de instalação.

  2. Para ver que versões de TLS e cifras estão ativadas para a sua app, introduza o seguinte comando:

    nmap -sV --script ssl-enum-ciphers -p 443 HOSTNAME

    Substitua HOSTNAME pelo nome de anfitrião da sua app. Pode usar o seu domínio personalizado ou o nome de anfitrião appspot.com que o App Engine criou para a sua app. Por exemplo:

    nmap -sV --script ssl-enum-ciphers -p 443 example.uc.r.appspot.com

Desative as versões e as cifras do TLS

Se usar o Cloud Load Balancing e os NEGs sem servidor para encaminhar tráfego para a sua app do App Engine, pode desativar uma versão ou uma cifra do TLS definindo uma política de segurança SSL que especifica que versões e cifras do TLS podem ser usadas para ligações HTTPS ou SSL.