Como usar certificados SSL autogerenciados

Os certificados SSL autogerenciados são conseguidos, provisionados e renovados por você. É possível usar esse recurso para proteger a comunicação entre os clientes e o balanceador de carga.

Os certificados autogerenciados podem ser qualquer combinação dos seguintes tipos de certificado:

  • Validação de domínio (DV, na sigla em inglês)
  • Validação da organização (OV, na sigla em inglês)
  • Validação estendida (EV, na sigla em inglês)

Nesta página, você verá o processo de recebimento e upload de um certificado válido para criar um recurso de certificado SSL do Google Cloud.

Antes de começar

Permissões

Para executar as tarefas incluídas neste guia, é preciso ser capaz de criar e modificar certificados SSL no projeto. Você terá esses direitos se tiver um destes papéis ou permissões:

Balanceadores de carga

Um certificado SSL é necessário para determinados tipos de balanceadores de carga do Google Cloud, como:

Etapa 1: criar uma chave privada e um certificado

Se você já tiver uma chave privada e um certificado de uma autoridade de certificação (CA, na sigla em inglês), ignore esta seção e acesse Como criar um recurso de certificado SSL.

Selecionar ou criar uma chave privada

Um certificado SSL do Google Cloud inclui uma chave privada e o certificado em si, ambos no formato PEM. A chave privada precisa atender aos seguintes critérios:

  • Ela precisa estar no formato PEM (em inglês).
  • Ela não pode ser protegida por uma senha longa. O Google Cloud armazena a chave privada em um formato criptografado próprio.
  • O algoritmo de criptografia dele tem que ser RSA-2048 ou ECDSA P-256.

É possível criar uma nova chave privada com a criptografia RSA-2048 no formato PEM usando o comando OpenSSL a seguir.

openssl genrsa -out PRIVATE_KEY_FILE 2048

Substitua PRIVATE_KEY_FILE pelo caminho e nome do arquivo do novo arquivo de chave privada.

Criar uma CSR

Após a conclusão do processo anterior, será possível gerar uma solicitação de assinatura de certificado (CSR, na sigla em inglês) no formato PEM usando OpenSSL. Sua CSR precisa atender aos seguintes critérios:

  • Ela precisa estar no formato PEM.
  • É necessário que ela tenha um nome comum (CN) ou um atributo de nome alternativo do assunto (SAN). Na prática, seu certificado precisa conter os dois atributos (CN e SAN), mesmo que seja para um único domínio. Clientes modernos, como as versões atuais do macOS e iOS, não dependem apenas do atributo CN.
  1. Crie um arquivo de configuração OpenSSL. No exemplo a seguir, os nomes alternativos do assunto são definidos na [sans_list].

    cat <<'EOF' >CONFIG_FILE
    [req]
    default_bits              = 2048
    req_extensions            = extension_requirements
    distinguished_name        = dn_requirements
    
    [extension_requirements]
    basicConstraints          = CA:FALSE
    keyUsage                  = nonRepudiation, digitalSignature, keyEncipherment
    subjectAltName            = @sans_list
    
    [dn_requirements]
    countryName               = Country Name (2 letter code)
    stateOrProvinceName       = State or Province Name (full name)
    localityName              = Locality Name (eg, city)
    0.organizationName        = Organization Name (eg, company)
    organizationalUnitName    = Organizational Unit Name (eg, section)
    commonName                = Common Name (e.g. server FQDN or YOUR name)
    emailAddress              = Email Address
    
    [sans_list]
    DNS.1                     = SUBJECT_ALTERNATIVE_NAME_1
    DNS.2                     = SUBJECT_ALTERNATIVE_NAME_2
    
    EOF
    
  2. Execute o seguinte comando OpenSSL para criar um arquivo de solicitação de assinatura de certificado (CSR, na sigla em inglês). O comando é interativo. São solicitados atributos, exceto os nomes alternativos do assunto, que foram definidos em [sans_list] do CONFIG_FILE anteriormente.

    openssl req -new -key PRIVATE_KEY_FILE \
        -out CSR_FILE \
        -config CONFIG_FILE
    

Nas duas etapas, substitua os marcadores por valores válidos. Veja estas descrições:

  • CONFIG_FILE: o caminho, incluindo o nome do arquivo, para o arquivo de configuração OpenSSL. É possível excluir esse item após a conclusão deste procedimento.
  • SUBJECT_ALTERNATIVE_NAME_1 e SUBJECT_ALTERNATIVE_NAME_2: nomes alternativos do assunto para seu certificado. Se ele for apenas para um nome de host, defina apenas um nome alternativo do assunto que corresponda ao nome comum. Se você precisar de mais de dois SANs, adicione os nomes ao arquivo de configuração e aumente o número após DNS (DNS.3, DNS.4 etc.).
  • PRIVATE_KEY_FILE: o caminho para o arquivo de chave privada.
  • CSR_FILE: o caminho, incluindo o nome do arquivo, para a CSR.

Assinar a CSR

Quando uma autoridade de certificação (CA, na sigla em inglês) assina a CSR, ela usa a própria chave privada para criar um certificado.

Como usar uma CA confiável publicamente

  • Se você solicitar que uma CA confiável publicamente assine a CSR, o certificado resultante terá a confiança de todos os clientes que confiam nessa CA pública.
  • Para produzir um certificado assinado, a CA pública só precisa da CSR.

Como gerenciar sua própria CA

  • Se você gerencia sua própria CA, use-a para assinar a CSR. Isso criará um certificado confiável internamente quando os clientes também forem configurados para confiar na sua própria CA.

Como usar um certificado autoassinado

  • Se você assinar a CSR com a mesma chave privada que usou para gerar a CSR, criará um certificado autoassinado. Os certificados autoassinados só são identificados como confiáveis por clientes que estejam configurados para ignorar a validação do certificado. Por exemplo, um cliente de navegador da Web exibe uma mensagem perguntando se você identifica um certificado autoassinado como confiável. É recomendável usar certificados autoassinados apenas para testes.

Se você gerencia sua própria CA ou planeja criar um certificado autoassinado para testes, use o seguinte comando OpenSSL:

openssl x509 -req \
    -signkey PRIVATE_KEY_FILE \
    -in CSR_FILE \
    -out CERTIFICATE_FILE \
    -days TERM

Substitua os marcadores por valores válidos:

  • PRIVATE_KEY_FILE: o caminho para a chave privada da CA. Ao criar um certificado autoassinado para testes, esta chave privada é a mesma usada para gerar o CSR.
  • CSR_FILE: o caminho para o CSR
  • CERTIFICATE_FILE: o caminho para o arquivo de certificado a ser criado
  • TERM: o número de dias, a partir de agora, durante os quais o certificado precisa ser considerado válido pelos clientes que o verificam

Caracteres curinga em nomes reais

Os certificados SSL autogerenciáveis podem usar um caractere curinga no nome comum. Por exemplo, um certificado com o nome comum *.example.com. corresponde aos nomes do host www.example.com e foo.example.com, mas não a a.b.example.com ou example.com. Quando o balanceador de carga seleciona um certificado, ele sempre prefere combinar um nome de host com certificados sem caracteres curinga em vez de certificados com caracteres curinga.

Não são aceitos certificados com fragmentos de caracteres curinga, como f*.example.com.

Etapa 2: criar um recurso de certificado SSL autogerenciado

Para poder criar um recurso de certificado SSL do Google Cloud, você precisa ter uma chave privada e um certificado. Consulte Como criar uma chave privada e um certificado caso ainda não os tenha criado ou recebido.

Console

É possível trabalhar com certificados SSL na guia Certificados da página Balanceamento de carga.

  1. Acesse a página "Certificados" no Console do Google Cloud.
    Acessar a página "Certificados"
  2. Clique em Criar certificado SSL.
  3. Digite um nome e uma descrição opcional para o certificado.
  4. Selecione Fazer upload do meu certificado.
  5. Cole seu certificado ou clique em Fazer upload para navegar até seu arquivo de certificado.
    Opte por incluir a cadeia de certificados de CA no mesmo arquivo que o certificado. O Google Cloud não valida a cadeia de certificados para você. A validação é responsabilidade sua.
  6. Cole a chave privada ou clique em Fazer upload para navegar até o arquivo da chave privada.
  7. Clique em Criar

gcloud

Para criar um certificado SSL global que possa ser usado para balanceadores de carga HTTP(S) externos ou balanceadores de carga de proxy SSL, use o comando gcloud compute ssl-certificates create com a sinalização --global:

gcloud compute ssl-certificates create CERTIFICATE_NAME \
    --certificate=CERTIFICATE_FILE \
    --private-key=PRIVATE_KEY_FILE \
    --global

Para criar um certificado SSL regional que possa ser usado para balanceadores de carga HTTP(S) internos, use o comando gcloud compute ssl-certificates create com a sinalização --region:

gcloud compute ssl-certificates create CERTIFICATE_NAME \
    --certificate=CERTIFICATE_FILE \
    --private-key=PRIVATE_KEY_FILE \
    --region=REGION

Substitua os marcadores por valores válidos:

  • CERTIFICATE_NAME: o nome do recurso de certificado global a ser criado
  • CERTIFICATE_FILE: o caminho para um arquivo de certificado formatado em PEM. Opte por incluir a cadeia de certificados de CA no mesmo arquivo que o certificado. O Google Cloud não valida a cadeia de certificados para você. A validação é responsabilidade sua.
  • PRIVATE_KEY_FILE: o caminho para uma chave privada formatada em PEM. A chave privada não pode ser protegida por uma senha longa.
  • REGION: se aplicável, a região referente ao certificado SSL regional. Se esse recurso de certificado for para um balanceador de carga HTTP(S) interno, a região precisará ser a mesma desse balanceador de carga.

api

Para balanceadores de carga de proxy SSL e HTTPS externos, use o método de API sslCertificates.insert.

Para balanceadores de carga HTTPS internos, use o método de API regionSslCertificates.insert.

Antes de usar esses métodos, primeiro leia o certificado e os arquivos de chave privada porque a solicitação da API precisa enviar o conteúdo dos arquivos. Para amostras de código, consulte a página de referência da API.

Etapa 3: associar um certificado SSL a um proxy de destino

Você precisa associar pelo menos um certificado SSL a cada proxy SSL ou HTTPS de destino. É possível configurar o proxy de destino com até o número máximo de certificados SSL por proxy SSL de destino ou HTTPS de destino. Também é possível referenciar vários certificados autogerenciáveis no mesmo proxy de destino.

Console

Ao usar o Console do Google Cloud para editar um balanceador de carga atual, você associa automaticamente o certificado SSL ao proxy de destino adequado.

gcloud

Para associar um certificado SSL global a um proxy HTTPS de destino referente a um balanceador de carga HTTP(S) externo, use o comando gcloud compute target-https-proxies update com as sinalizações --global e --global-ssl-certificates:

gcloud compute target-https-proxies update TARGET_PROXY_NAME \
    --global \
    --ssl-certificates=CERTIFICATE_LIST \
    --global-ssl-certificates

Para associar um certificado SSL global a um proxy SSL de destino referente a um balanceador de carga de proxy SSL, use o comando gcloud compute target-ssl-proxies update:

gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \
    --ssl-certificates=CERTIFICATE_LIST

Para associar um certificado SSL regional a um proxy HTTPS de destino referente a um balanceador de carga HTTP(S) interno, use o comando gcloud compute target-https-proxies update com as sinalizações --region e --ssl-certificates-region:

gcloud compute target-https-proxies update TARGET_PROXY_NAME \
    --region=REGION \
    --ssl-certificates=CERTIFICATE_LIST \
    --ssl-certificates-region=REGION

Substitua os marcadores por valores válidos:

  • TARGET_PROXY_NAME: o nome do proxy de destino do balanceador de carga
  • CERTIFICATE_LIST: uma lista separada por vírgulas de nomes de certificados SSL do Google Cloud
  • REGION: se aplicável, a região referente ao proxy de destino regional e ao certificado SSL regional

Etapa 4: atualizar os registros DNS A e AAAA para apontar para o endereço IP do balanceador de carga

No site do registrador, no host DNS ou no ISP (onde seus registros DNS são gerenciados), adicione ou atualize os registros DNS A (para IPv4) e os registros AAAA de DNS (para IPv6) dos seus domínios e subdomínios para que eles apontem para o Endereço IP associado às regras de encaminhamento do balanceador de carga.

Se você estiver usando o Cloud DNS e o Google Domains, configure seus domínios e atualize os servidores de nomes.

Se você estiver usando vários domínios para um único certificado, adicione ou atualize os registros DNS de todos os domínios e subdomínios para que todos apontem para o endereço IP do balanceador de carga.

Depois de aguardar a conclusão da propagação do DNS, é possível verificar a configuração executando o comando dig. Por exemplo, suponha que seu domínio seja www.example.com. Execute este comando dig:

dig www.example.com
; <<>> DiG 9.10.6 <<>> www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31748
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.example.com.           IN  A

;; ANSWER SECTION:
www.example.com.        1742    IN  CNAME   www.example.com.edgekey.net.
www.example.com.edgekey.net. 21330 IN   CNAME   www.example.com.edgekey.net.globalredir.akadns.net.
www.example.com.edgekey.net.globalredir.akadns.net. 3356 IN CNAME   e6858.dsce9.akamaiedge.net.
e6858.dsce9.akamaiedge.net. 19  IN  A   203.0.113.5

;; Query time: 43 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Jun 03 16:54:44 PDT 2020
;; MSG SIZE  rcvd: 193

Neste exemplo, 203.0.113.5 é o endereço IP do balanceador de carga.

Etapa 5: testar com o OpenSSL

Depois que os status de certificado e domínio estiverem ativos, pode levar até 30 minutos para que o balanceador de carga comece a usar o certificado SSL autogerenciado.

Para testar, execute o seguinte comando OpenSSL, substituindo DOMAIN pelo nome DNS e IP_ADDRESS pelo endereço IP do balanceador de carga.

echo | openssl s_client -showcerts -servername DOMAIN -connect IP_ADDRESS:443 -verify 99 -verify_return_error

Esse comando gera os certificados que o balanceador de carga apresenta ao cliente. A saída precisa incluir a cadeia de certificados, Verify return code: 0 (ok) e outras informações detalhadas.

Como trabalhar com certificados SSL autogerenciados

As seções a seguir descrevem como listar, visualizar, excluir e substituir recursos de certificado SSL.

Como listar certificados SSL

Console

Verifique o status dos certificados SSL na guia Certificados da página Balanceamento de carga.

  1. Acesse a página "Certificados" no Console do Google Cloud.
    Acessar a página "Certificados"
  2. (Opcional) Filtre a lista de certificados SSL.

gcloud

Para listar certificados SSL globais que podem ser usados para balanceadores de carga HTTP(S) externos ou balanceadores de carga de proxy SSL, use o comando gcloud compute ssl-certificates list com a sinalização --global:

gcloud compute ssl-certificates list \
   --global

Para listar certificados SSL regionais que podem ser usados para balanceadores de carga HTTP(S) internos, use o comando gcloud compute ssl-certificates list com o filtro region:

gcloud compute ssl-certificates list \
   --filter="region:(REGION ...)"

Substitua os marcadores por valores válidos:

  • REGION: uma região do Google Cloud. Inclua várias regiões como uma lista separada por espaços.

Como descrever certificados SSL

Console

Para ver mais detalhes sobre seus certificados SSL, acesse a guia Certificados na página Balanceamento de carga.

  1. Acesse a página "Certificados" no Console do Google Cloud.
    Acessar a página "Certificados"
  2. (Opcional) Filtre a lista de certificados SSL.
  3. Para ver mais detalhes, clique no nome do certificado.

gcloud

Para descrever um certificado SSL global (para balanceadores de carga HTTP(S) externos ou balanceadores de carga de proxy SSL), use o comando gcloud compute ssl-certificates describe com a sinalização --global:

gcloud  compute ssl-certificates describe CERTIFICATE_NAME \
   --global

Para descrever um certificado SSL regional (para balanceadores de carga HTTP(S) internos), use o comando gcloud compute ssl-certificates describe com a sinalização --region:

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
   --region=REGION

Substitua os marcadores por valores válidos:

  • CERTIFICATE_NAME: o nome do certificado SSL
  • REGION: uma região do Google Cloud

Excluindo certificados SSL

Antes de excluir um certificado SSL, você precisa atualizar cada proxy de destino que referencia o certificado. Para cada proxy de destino, execute o comando gcloud update apropriado para atualizar o CERTIFICATE_LIST do proxy de destino para que não inclua mais o certificado SSL que você quer excluir. Cada proxy SSL de destino ou proxy HTTPS de destino precisa referenciar pelo menos um certificado SSL.

Depois de atualizar o proxy de destino, é possível excluir o certificado SSL.

Console

É possível excluir certificados SSL na guia Certificados da página Balanceamento de carga.

  1. Acesse a página "Certificados" no Console do Google Cloud.
    Acessar a página "Certificados"
  2. Selecione o certificado SSL que você quer excluir.
  3. Clique em Excluir.
  4. Para confirmar, clique em Excluir novamente.

gcloud

Para excluir um certificado SSL global (para balanceadores de carga HTTP(S) externos ou balanceadores de carga de proxy SSL), use o comando gcloud compute ssl-certificates delete com o comando --global:

gcloud compute ssl-certificates delete CERTIFICATE_NAME \
    --global

Para excluir um certificado SSL regional (para balanceadores de carga HTTP(S) internos), use o comando gcloud compute ssl-certificates delete com o comando --region:

gcloud compute ssl-certificates delete CERTIFICATE_NAME \
    --region=REGION

Substitua os marcadores por valores válidos:

  • CERTIFICATE_NAME: o nome do certificado SSL
  • REGION: uma região do Google Cloud

Como substituir certificados SSL

Siga estas etapas se precisar substituir ou alternar um certificado SSL:

  1. Crie um novo recurso de certificado SSL. O novo certificado SSL precisa ter um nome exclusivo no projeto.
  2. Atualize o proxy de destino para que a lista de certificados SSL inclua o novo certificado SSL na primeira posição para torná-lo o certificado principal. Após o novo certificado, inclua os certificados SSL que você quer reter. Exclua o certificado SSL antigo que não é mais necessário. Para evitar inatividade, execute um único comando gcloud com a sinalização --ssl-certificates. Exemplo:

    Para balanceadores de carga HTTP(S) externos:

    Use o comando gcloud compute target-https-proxies update com a sinalização --global.

    gcloud compute target-https-proxies update TARGET_PROXY_NAME \
       --global \
       --ssl-certificates=new-ssl-cert,other-certificates \
       --global-ssl-certificates
    

    Para balanceadores de carga HTTP(S) internos:

    Use o comando gcloud compute target-https-proxies update com a sinalização --region.

    gcloud compute target-https-proxies update TARGET_PROXY_NAME \
       --region REGION \
       --ssl-certificates=new-ssl-cert,other-certificates \
       --global-ssl-certificates
    

    Para balanceadores de carga de proxy SSL:

    Use o comando gcloud compute target-ssl-proxies update com a sinalização --backend-service.

    gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \
       --ssl-certificates=new-ssl-cert,other-certificates
    
  3. Verifique se o balanceador de carga está disponibilizando o certificado de substituição ao executar o seguinte comando OpenSSL:

    echo | openssl s_client -showcerts -connect IP_ADDRESS:443 -verify 99 -verify_return_error
    
  4. Aguarde 15 minutos para garantir que o certificado de substituição esteja disponível para todos os Google Front Ends (GFEs).

  5. (Opcional) Exclua o certificado SSL antigo.

A seguir