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)
Os certificados autogerenciados suportam os seguintes balanceadores de carga:
- Certificados globais
- Balanceador de carga de aplicativo externo global
- Balanceador de carga de aplicativo clássico
- Balanceador de carga de rede de proxy externo (com um proxy SSL de destino)
- Certificados regionais
- Balanceador de carga de aplicativo externo regional
- Balanceador de carga de aplicativo interno
Nesta página, você verá o processo de recebimento e upload de um certificado do COmpute Engine válido para criar um recurso de certificado SSL do Google Cloud.
Para criar certificados gerenciados pelo Google usando o Gerenciador de certificados, consulte a Visão geral da implantação.
Antes de começar
- Certifique-se de que você esteja familiarizado com a visão geral dos certificados SSL.
- Verifique se você tem os nomes de domínio que quer usar para o certificado SSL autogerenciado. Se você estiver usando o Cloud Domains, consulte a Etapa 1: registrar um nome de domínio usando o Cloud Domains.
Permissões
Para executar as tarefas incluídas neste guia, é preciso ser capaz de criar e modificar certificados SSL no projeto. É possível fazer isso se uma das seguintes condições for verdadeira:
- Você é um proprietário ou
editor do projeto (
roles/owner
ouroles/editor
). - Você tem o papel de administrador de segurança do Compute
(
compute.securityAdmin
) e o papel de Administrador de rede do Compute (compute.networkAdmin
) no projeto. - Você tem um papel personalizado no projeto, o que inclui as
permissões
compute.sslCertificates.*
e uma ou ambas (compute.targetHttpsProxies.*
ecompute.targetSslProxies.*
), dependendo do tipo de balanceador de carga utilizado.
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.
Para criar uma nova chave privada, use um dos seguintes comandos do OpenSSL.
Crie uma chave privada RSA-2048:
openssl genrsa -out PRIVATE_KEY_FILE 2048
Crie uma chave privada ECDSA P-256:
openssl ecparam -name prime256v1 -genkey -noout -out PRIVATE_KEY_FILE
Substitua PRIVATE_KEY_FILE pelo caminho e nome do arquivo do novo arquivo de chave privada.
Criar uma solicitação de assinatura de certificado (CSR, na sigla em inglês)
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
eSAN
), mesmo que seja para um único domínio. Clientes modernos, como as versões atuais do macOS e iOS, não dependem apenas do atributoCN
.
Para criar uma CSR, siga estas etapas:
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 prompt = no [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
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 o seguinte:
- CONFIG_FILE: o caminho, incluindo o nome do arquivo, do arquivo de configuração OpenSSL. Você pode excluir o arquivo depois de concluir este procedimento.
SUBJECT_ALTERNATIVE_NAME_1 e SUBJECT_ALTERNATIVE_NAME_2: nomes alternativos de assunto para seu certificado.
Se o certificado for apenas para um nome de host, defina apenas um nome alternativo de assunto que corresponda ao nome comum. Se você precisar de mais de dois nomes alternativos de assunto, adicione os nomes ao arquivo de configuração, aumentando o número após
DNS
(DNS.3
,DNS.4
etc.).PRIVATE_KEY_FILE: o caminho para o arquivo da 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. Use um dos seguintes métodos para assinar a CSR:
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, o Public CA só precisa da sua CSR.
Usar sua própria CA interna
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.
Usar certificado autoassinado
Se você assinar a CSR com a mesma chave privada utilizada na criação da CSR, terá criado um certificado autoassinado. É recomendável usar certificados autoassinados apenas para testes.
O Google Cloud não oferece suporte à verificação do lado do cliente para certificados de servidor autoassinados. Portanto, configure o cliente para pular a validação do certificado. Por exemplo, é possível criar um cliente de navegador da Web que exiba uma mensagem perguntando se você quer confiar em um certificado autoassinado.
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 \ -extfile CONFIG_FILE \ -extensions extension_requirements \ -days TERM
Substitua:
- 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.
Depois de criar um certificado, não é possível alterar o escopo dele de global para regional, ou de regional para global.
Console
É possível trabalhar com certificados SSL globais na guia Certificados clássicos
do console do Google Cloud.
Não é possível criar certificados SSL regionais no console do Google Cloud.
Use gcloud
ou a API REST.
- Acesse a guia Certificado clássico no Console do Google Cloud.
Acessar os certificados clássicos - Clique em Criar certificado SSL.
- Digite um nome e uma descrição opcional para o certificado.
- Selecione Fazer upload do meu certificado.
- 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. - Cole a chave privada ou clique em Fazer upload para navegar até o arquivo da chave privada.
- Clique em Criar
gcloud
Para criar um certificado SSL global, 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,
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:
- 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 por 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 de aplicativo interno ou externo regional, a região precisará ser a mesma do balanceador de carga.
API
Para usar os métodos da API, primeiro leia os arquivos de certificado e de chave privada porque a solicitação da API precisa enviar o conteúdo dos arquivos.
Leia os arquivos do certificado e da chave privada e crie o certificado SSL. Os exemplos a seguir mostram como fazer isso com Python.
Para certificados SSL globais, use o método de API sslCertificates.insert:
Para certificados SSL regionais, use o método de API regionSslCertificates.insert:
Para exemplos de código adicionais, 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,
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=SSL_CERTIFICATE_LIST \ --global-ssl-certificates
Para associar um certificado SSL global a um proxy SSL de destino,
use o comando gcloud compute target-ssl-proxies
update
:
gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \ --ssl-certificates=SSL_CERTIFICATE_LIST
Para associar um certificado SSL regional a um proxy HTTPS de destino,
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=SSL_CERTIFICATE_LIST \ --ssl-certificates-region=REGION
Substitua:
TARGET_PROXY_NAME
: o nome do proxy de destino do balanceador de carga.REGION
: se aplicável, as regiões do proxy de destino regional e do certificado SSL regional, que precisam corresponder.SSL_CERTIFICATE_LIST
: uma lista de nomes de certificados SSL do Google Cloud separados por vírgulas.Verifique se a lista de certificados referenciados inclui todos os certificados SSL válidos mais antigos, bem como o novo. O comando
gcloud compute target-ssl-proxies update
substitui os valores originais de--ssl-certificates
pelo novo valor.
API
Para associar um certificado SSL global a um proxy HTTPS de destino, faça uma solicitação POST
ao método targetHttpsProxies.insert
, substituindo PROJECT_ID
pelo ID do projeto.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxy { "name": "l7-xlb-proxy", "urlMap": "projects/PROJECT_ID/global/urlMaps/l7-xlb-map", "sslCertificates": /projectsPROJECT_IDglobal/sslCertificates/SSL_CERT_NAME }
Para associar um certificado SSL global a um proxy HTTPS de destino, faça uma solicitação POST
ao método targetSslProxies.insert
, substituindo PROJECT_ID
pelo ID do projeto.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetSslProxy { "name": "l7-ssl-proxy", "sslCertificates": /projectsPROJECT_IDglobal/sslCertificates/SSL_CERT_NAME }
Para associar um certificado SSL regional a um proxy HTTPS de destino, faça uma solicitação POST
ao método targetHttpsProxies.insert
, substituindo PROJECT_ID
pelo ID do projeto.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxy { "name": "l7-xlb-proxy", "urlMap": "projects/PROJECT_ID/global/urlMaps/l7-ilb-map", "region": "us-west1" "sslCertificates": /projectsPROJECT_IDregions/us-west1/sslCertificates/SSL_CERT_NAME }
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 Cloud 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
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.
Trabalhar com certificados SSL autogerenciados
As seções a seguir descrevem como listar, visualizar, excluir e substituir recursos de certificado SSL.
Listar certificados SSL
Console
Verifique o status dos certificados SSL globais na guia Certificados clássicos da página Gerenciador de certificados.
Não é possível manter certificados SSL regionais no console do Google Cloud.
Use gcloud
ou a API REST.
- Acesse a guia "Certificados clássicos" no Console do Google Cloud.
Acessar os certificados clássicos - (Opcional) Filtre a lista de certificados SSL.
gcloud
Para listar certificados SSL globais, use o comando gcloud compute ssl-certificates
list
com a
sinalização --global
:
gcloud compute ssl-certificates list \ --global
Para listar certificados SSL regionais, use
o comando gcloud compute ssl-certificates
list
com o
filtro region
:
gcloud compute ssl-certificates list \ --filter="region:(REGION ...)"
Substitua:
- REGION: uma região do Google Cloud, que inclui várias regiões na forma de uma lista separada por espaços.
Descrever certificados SSL
Console
Veja mais detalhes sobre seus certificados SSL na guia Certificados clássicos da página Gerenciador de certificados.
- Acesse a página "Certificados clássicos" no Console do Google Cloud.
Acessar os certificados clássicos - (Opcional) Filtre a lista de certificados SSL.
- Para ver mais detalhes, clique no nome do certificado.
gcloud
Para descrever um certificado SSL global,
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, use o comando gcloud compute ssl-certificates
describe
com a sinalização --region
:
gcloud compute ssl-certificates describe CERTIFICATE_NAME \ --region=REGION
Substitua:
- CERTIFICATE_NAME: o nome do certificado SSL.
- REGION: uma região do Google Cloud.
Excluir 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 SSL_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, você pode excluir o certificado SSL.
Console
Você pode excluir os certificados SSL globais na guia Certificados Clássicos da página Gerenciador de certificados.
- Acesse a guia "Certificados clássicos" no Console do Google Cloud.
Acessar os certificados clássicos - Selecione o certificado SSL que você quer excluir.
- Clique em Excluir.
- Para confirmar, clique em Excluir novamente.
gcloud
Para excluir um certificado SSL global, 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, use o
comando gcloud compute ssl-certificates
delete
com o comando --region
:
gcloud compute ssl-certificates delete CERTIFICATE_NAME \ --region=REGION
Substitua:
- CERTIFICATE_NAME: o nome do certificado SSL.
- REGION: uma região do Google Cloud.
Substituir ou renovar um certificado SSL antes que ele expire
Siga estas etapas se precisar substituir, renovar ou alternar um certificado SSL:
Execute o comando
gcloud compute ssl-certificates describe
do certificado atual para verificar se ele está prestes a expirar.Crie um novo recurso de certificado SSL. O novo certificado SSL precisa ter um nome exclusivo no projeto.
Atualize o proxy de destino para remover o certificado SSL antigo e adicionar o novo. Inclua outros certificados SSL que você queira manter.
Para evitar inatividade, execute um único comando
gcloud
com a sinalização--ssl-certificates
. Exemplo:Para balanceadores de carga de aplicativo externos globais:
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 de aplicativo externos regionais e 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 rede de proxy externos:
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
Verifique se o balanceador de carga está disponibilizando o certificado de substituição executando o seguinte comando OpenSSL:
echo | openssl s_client -showcerts -connect IP_ADDRESS:443 -verify 99 -verify_return_error
Aguarde 15 minutos para garantir que a operação de substituição tenha sido propagada para todos os Google Front Ends (GFEs).
(Opcional) Exclua o certificado SSL antigo.
Fazer a rotação periódica dos certificados SSL
Essa solução de amostra verifica periodicamente o status de certificados usados com os balanceadores de carga do Google Cloud e alterna os certificados quando eles alcançam uma determinada porcentagem da vida útil. A ferramenta usa CAs configuradas com o Certificate Authority Service.
Essa solução funciona com os balanceadores de carga a seguir:
- Balanceador de carga de aplicativo externo global
- Balanceador de carga de aplicativo clássico
- Balanceador de carga de aplicativo externo regional
- Balanceador de carga de aplicativo interno
- Balanceador de carga de rede de proxy externo com um proxy SSL
A seguir
- Para resolver problemas de certificados SSL, consulte Como solucionar problemas de certificados SSL.