Como configurar o SSL/TLS

Nesta página, você verá como configurar uma instância para usar SSL/TLS e como gerenciar certificados do servidor e do cliente.

Para mais informações sobre como usar SSL/TLS com o MySQL, consulte Como usar conexões criptografadas no manual de referência do MySQL.

Introdução

O Cloud SQL aceita a conexão a uma instância com o protocolo Transport Layer Security (SSL/TLS). Se você estiver usando o endereço IP público de uma instância para se conectar a ela, deverá usar SSL/TLS. Assim, os dados enviados e recebidos do Cloud SQL ficam protegidos.

Se você estiver se conectando por meio de um IP privado, a configuração de SSL/TLS será opcional. O tráfego de acesso a serviços privados permanece sempre na rede do Google.

O Cloud SQL usa um certificado do servidor por instância autoassinado e um certificado (par de chaves pública/privada) no cliente. Por exemplo, um aplicativo externo que acessa a instância do Cloud SQL. Esses certificados trabalham juntos para permitir que o servidor (instância) e o cliente (aplicativo) criptografem a comunicação deles. Você precisa ter um certificado válido tanto do servidor quanto do cliente (par de chaves) para aceitar a comunicação criptografada.

Como aplicar SSL/TLS

Mesmo que você configure sua instância do Cloud SQL para conexões SSL/TLS, ela ainda poderá aceitar conexões não seguras. Se você não exigir SSL/TLS para todas as conexões, qualquer problema com a configuração SSL/TLS poderá fazer com elas sejam redefinidas para o padrão não criptografado, sem nenhum aviso. Por esse motivo, se você acessar sua instância usando um IP, é recomendável aplicar SSL a todas as conexões.

As conexões à sua instância por meio do Cloud SQL Proxy são criptografadas, independentemente de você configurar ou aplicar SSL/TLS ou não. A configuração SSL/TLS afeta somente as conexões feitas usando endereços IP.

Para aplicar SSL/TLS em todas as conexões à sua instância:

Console

  1. Acesse a página "Instâncias do Cloud SQL" no Console do Google Cloud Platform.
    Acessar a página "Instâncias do Cloud SQL"
  2. Clique no nome da instância para abrir a página Detalhes da instância.
  3. Selecione a guia Conexões.
  4. Role para baixo até a seção de Conexões SSL.
  5. Clique em Permitir somente conexões SSL.

gcloud

gcloud sql instances patch [INSTANCE_NAME] --require-ssl

cURL

ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{"settings" :
                 { "ipConfiguration" : {
                       "requireSsl" : "true" }}}' \
     -X PATCH \
     https://www.googleapis.com/sql/v1beta4/projects/<PROJECT-ID>/instances/<INSTANCE_NAME>

Como gerenciar certificados do servidor

O Cloud SQL cria um certificado de servidor automaticamente quando você cria a instância. Desde que o certificado do servidor seja válido, você não precisa gerenciá-lo ativamente. No entanto, o certificado tem uma data de validade. Após essa data, ele não será mais válido, e os clientes não poderão estabelecer uma conexão segura com sua instância.

O Cloud SQL fornece uma maneira de fazer a rotação do certificado do servidor, para que um novo possa ser criado antes que o antigo expire.

Como funciona a rotação de certificados do servidor

Cerca de três meses antes do vencimento do certificado do servidor para uma instância do Cloud SQL, os proprietários do projeto recebem um e-mail informando que o processo de rotação do certificado foi iniciado para essa instância. O e-mail fornece o nome da instância e informa aos proprietários que um novo certificado do servidor foi adicionado ao projeto. O certificado do servidor existente, assim como os do cliente, continua a funcionar normalmente. Na verdade, a instância tem dois certificados de servidor durante esse período.

O administrador do projeto, ou alguém com as permissões apropriadas, faz o download de um novo arquivo PEM de certificado do servidor. Esse arquivo contém as informações do certificado atual e do novo. Em seguida, é necessário atualizar todos os clientes que acessam a instância do Cloud SQL com SSL/TLS para usarem o novo arquivo PEM.

Depois que todos os clientes forem atualizados, o administrador do projeto informará ao Cloud SQL para usar somente o novo certificado do servidor. Isso significa que o certificado do servidor antigo não será mais reconhecido e apenas o novo poderá ser usado.

Nesse momento, a rotação está completa, e nenhuma outra ação é necessária. Os certificados do cliente não são afetados pela rotação do certificado do servidor.

Como fazer a rotação dos certificados do servidor

Se você tiver recebido um aviso sobre seus certificados que estão para expirar ou se tiver iniciado uma rotação, siga as etapas a seguir para concluí-la:

  1. Faça o download das informações do novo certificado do servidor.
  2. Atualize seus clientes para usarem as novas informações do certificado do servidor.
  3. Conclua a rotação, com ela, o certificado ativo atual é movido para o slot "anterior" e o recém-adicionado é atualizado para que seja o certificado ativo.

Console

Faça o download das informações do novo certificado do servidor:

  1. Acesse a página "Instâncias do Cloud SQL" no Console do Google Cloud Platform.
    Acessar a página "Instâncias do Cloud SQL"
  2. Clique no nome da instância para abrir a página Detalhes da instância.
  3. Selecione a guia Conexões.
  4. Role para baixo até a seção Configurar certificados do servidor SSL.
  5. Clique em Criar novo certificado.
  6. Role para baixo até a seção Download de certificados do servidor SSL.
  7. Clique em Fazer o download.

    As informações do certificado do servidor, codificadas como um arquivo PEM, são exibidas e podem ser carregadas para o ambiente local.

  8. Atualize todos os seus clientes para que eles usem as novas informações.

Depois de atualizar os clientes, conclua a rotação:

  1. Volte para a seção Configurar certificados do servidor SSL.
  2. Clique em Girar certificado.
  3. Confirme se os clientes estão se conectando corretamente.

    Se algum cliente não conseguir se conectar usando o certificado recém-criado, clique em Reverter certificado para reverter à configuração anterior.

gcloud

  1. Faça o download das informações do certificado para um arquivo PEM local:

    gcloud beta sql ssl server-ca-certs list --format='value(cert)' \
        --instance=[INSTANCE_NAME] > [FILE_PATH]/[FILE_NAME].pem
    
  2. Atualize todos os seus clientes para que eles usem as novas informações.

  3. Depois de atualizar seus clientes, conclua a rotação:

    gcloud beta sql ssl server-ca-certs rotate --instance=[INSTANCE_NAME]
    
  4. Confirme se os clientes estão se conectando corretamente.

    Se algum cliente não estiver se conectando com o novo certificado, você poderá fazer rollback para a configuração anterior.

cURL

  1. Faça o download de seus certificados do servidor:

    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X GET \
         https://www.googleapis.com/sql/v1beta4/projects/<PROJECT-ID>/instances/<INSTANCE_NAME>/listServerCas
    
  2. Complete a rotação:

    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/<PROJECT-ID>/instances/<INSTANCE_NAME>/rotateServerCa
    

Como fazer rollback de uma operação de rotação de certificado

Depois da conclusão da rotação, é necessário que todos os seus clientes usem o novo certificado para se conectar à sua instância do Cloud SQL. Se os clientes não forem atualizados de maneira correta para usar as novas informações de certificado, eles não poderão se conectar à sua instância usando SSL/TLS. Se isso acontecer, você poderá fazer rollback para a configuração anterior.

Uma operação de rollback move o certificado ativo no momento para o "próximo" slot, substituindo qualquer certificado marcado como "próximo". O certificado "anterior" se torna o ativo, retornando sua configuração ao estado em que estava antes de você concluir a rotação.

Para fazer rollback para a configuração do certificado anterior:

Console

  1. Acesse a página "Instâncias do Cloud SQL" no Console do Google Cloud Platform.
    Acessar a página "Instâncias do Cloud SQL"
  2. Clique no nome da instância para abrir a página Detalhes da instância.
  3. Selecione a guia Conexões.
  4. Role para baixo até a seção Configurar certificados do servidor SSL.
  5. Clique em Girar certificado. A ação demora alguns segundos para ser concluída.
  6. Clique em Reverter certificado.

gcloud

  gcloud beta sql ssl server-ca-certs rollback --instance=[INSTANCE_NAME]

cURL

  1. Faça o download de seus certificados do servidor:

    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X GET \
         https://www.googleapis.com/sql/v1beta4/projects/<PROJECT-ID>/instances/<INSTANCE_NAME>/listServerCas
    
  2. Copie o campo sha1Fingerprint da versão que você quer fazer rollback.

    Procure a versão com um valor createTime imediatamente anterior à versão com sha1Fingerprint mostrado como activeVersion.

  3. Faça rollback da rotação:

    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{"rotateServerCaContext" :
                     { "nextVersion" : "<SHA1FINGERPRINT>"}}' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/<PROJECT-ID>/instances/<INSTANCE_NAME>/rotateServerCa
    

Como iniciar uma rotação

Você não precisa esperar o e-mail do Cloud SQL para iniciar uma rotação. Você pode fazer isso a qualquer momento. Ao iniciar uma rotação, um novo certificado é criado e colocado no "próximo" slot. Caso esse certificado já esteja no "próximo" slot, ele será excluído. Pode haver somente um "próximo" certificado.

Para iniciar uma rotação:

Console

  1. Acesse a página "Instâncias do Cloud SQL" no Console do Google Cloud Platform.
    Acessar a página "Instâncias do Cloud SQL"
  2. Clique no nome da instância para abrir a página Detalhes da instância.
  3. Selecione a guia Conexões.
  4. Role para baixo até a seção Configurar certificados do servidor SSL.
  5. Clique em Criar novo certificado.
  6. Conclua a rotação conforme descrito em Como fazer a rotação de certificados do servidor.

gcloud

  1. Inicie a rotação:

      gcloud beta sql ssl server-ca-certs create --instance=[INSTANCE_NAME]
    
  2. Conclua a rotação conforme descrito em Como fazer a rotação de certificados do servidor.

cURL

  ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
  curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
       -X POST \
       https://www.googleapis.com/sql/v1beta4/projects/<PROJECT-ID>/instances/<INSTANCE_NAME>/rotateServerCa

Conclua a rotação conforme descrito em Como fazer a rotação de certificados do servidor.

Como receber informações sobre o certificado do servidor

Você pode receber informações sobre o certificado do servidor, como a data de validade ou o nível de criptografia que ele oferece.

Console

  1. Acesse a página "Instâncias do Cloud SQL" no Console do Google Cloud Platform.

    Acessar a página "Instâncias do Cloud SQL"

  2. Clique no nome da instância para abrir a página Detalhes da instância.
  3. Selecione a guia Conexões.
  4. Role para baixo até a seção Configurar certificados do servidor SSL.

    Veja a data de validade do certificado do servidor na tabela.

    Para ver o tipo de certificado, use a ferramenta de linha de comando gcloud.

gcloud

gcloud beta sql ssl server-ca-certs list --instance=[INSTANCE_NAME]

cURL

Você pode ver detalhes do certificado de servidor ao descrever a instância:

ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     -X GET \
     https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]?fields=serverCaCert

Como redefinir sua configuração SSL/TLS

Se você precisar redefinir completamente sua configuração SSL/TLS, poderá fazê-lo.

gcloud

Para as instâncias de primeira geração, esta tarefa requer a reinicialização da instância do Cloud SQL.

  1. Atualize o certificado:

    gcloud sql instances reset-ssl-config [INSTANCE_NAME]
    
  2. Se a instância for da Primeira geração, reinicie-a para concluir a atualização.

    gcloud sql instances restart [INSTANCE_NAME]
    
  3. Crie novos certificados do cliente.

cURL

Para as instâncias de primeira geração, esta tarefa requer a reinicialização da instância do Cloud SQL.

  1. Atualize o certificado:

    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --header 'Content-Length: 0' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/resetSslConfig
    
  2. Se a instância for de primeira geração, reinicie-a:

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Length: 0' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/restart
    
  3. Crie novos certificados do cliente.

Gerenciamento de certificados do cliente

Criação de um novo certificado do cliente

Você pode criar até dez certificados do cliente em cada instância. Se você perder a chave privada de um certificado, precisará criar uma nova. Não é possível recuperá-la.

Console (Segunda geração)

  1. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud Platform.

    Acessar a página "Instâncias do Cloud SQL"

  2. Clique no nome da instância para abrir a página Detalhes da instância.
  3. Selecione a guia Conexões.
  4. Role para baixo até a seção Configurar certificados do cliente SSL.
  5. Clique em Criar novo certificado.
  6. Na caixa de diálogo Criar um certificado do cliente, forneça ao certificado um nome exclusivo para isso.
  7. Clique em Criar.
  8. Na primeira seção da caixa de diálogo Novo certificado SSL criado, clique em Fazer o download de client-key.pem para fazer o download da chave privada em um arquivo denominado client-key.pem.
  9. Na segunda seção, clique em Fazer o download de client-cert.pem para fazer o download do certificado do cliente em um arquivo denominado client-cert.pem.
  10. Na terceira seção, clique em Fazer o download de server-ca.pem para fazer o download do certificado do servidor em um arquivo chamado server-ca.pem.
  11. Clique em Fechar.

Console (1ª geração)

Esta tarefa faz com que a instância do Cloud SQL seja reiniciada.

  1. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud Platform.

    Acessar a página "Instâncias do Cloud SQL"

  2. Clique no nome da instância para abrir a página Detalhes da instância.
  3. Selecione a guia Conexões.
  4. \
  5. Na seção Certificados do cliente, clique em Criar um certificado do cliente.
  6. Na caixa de diálogo Novo certificado do cliente, insira um nome exclusivo para o certificado e clique em Adicionar.
  7. Na primeira seção da caixa de diálogo Novo certificado SSL criado, clique no link para fazer o download da chave privada em um arquivo denominado client-key.pem.
  8. Na segunda seção, clique no link para fazer o download do certificado de cliente para um arquivo chamado client-cert.pem.
  9. Na terceira seção, clique no link para fazer o download do certificado de servidor para um arquivo chamado server-ca.pem.
  10. Clique em Fechar e reiniciar para reiniciar a instância imediatamente, ou em Fechar e reinicie-a manualmente mais tarde.

    É necessário reiniciar a instância para ativar o certificado.

gcloud

Para as instâncias de primeira geração, esta tarefa requer a reinicialização da instância do Cloud SQL.

  1. Crie um certificado do cliente usando o comando ssl client-certs create:

    gcloud sql ssl client-certs create [CERT_NAME] client-key.pem --instance=[INSTANCE_NAME]
    
  2. Recupere a chave pública referente ao certificado recém-criado e a copie no arquivo client-cert.pem com o comando ssl client-certs describe:

    gcloud sql ssl client-certs describe [CERT_NAME] --instance=[INSTANCE_NAME] --format='value(cert)' > client-cert.pem
    
  3. Copie o certificado do servidor para o arquivo server-ca.pem com o comando instances describe:

    gcloud sql instances describe [INSTANCE_NAME]  --format='value(serverCaCert.cert)' > server-ca.pem
    
  4. Se a instância for de primeira geração, reinicie-a para ativar o certificado e a alteração na configuração SSL/TLS.

    gcloud sql instances restart [INSTANCE_NAME]
    

cURL

Para as instâncias de primeira geração, esta tarefa requer a reinicialização da instância do Cloud SQL.

  1. Crie um certificado SSL/TLS e forneça um nome exclusivo para ele nesta instância:

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{"commonName" : "[CERT_NAME]"}' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/sslCerts
    
  2. Copie todo o conteúdo do certificado que está entre aspas (mas sem copiar as aspas) da resposta para os arquivos locais, da seguinte maneira:
    1. Copie serverCaCert.cert para server-ca.pem.
    2. Copie clientCert.cert para client-cert.pem.
    3. Copie certPrivateKey para client-key.pem.
  3. Se a instância for de primeira geração, reinicie-a:

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Length: 0' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/restart
    

Neste momento, você tem:

  • um certificado do servidor salvo como server-ca.pem;
  • uma chave pública do cliente salva como client-cert.pem;
  • uma chave privada do cliente salva como client-key.pem.

Dependendo da ferramenta que você usa para se conectar, esses três itens são especificados de modo diferente. Por exemplo, ao se conectar usando o cliente MySQL, esses três arquivos são os valores das opções de comando --ssl-ca, --ssl-cert e --ssl-key, respectivamente. Para ver um exemplo de conexão que usa o cliente MySQL e SSL/TLS, consulte Conexão com o cliente MySQL.

Como recuperar um certificado do cliente

É possível recuperar a parte da chave pública de um certificado do cliente. No entanto, não é possível recuperar a chave privada. Se você perdeu a chave privada, precisa criar um novo certificado.

Console

  1. Acesse a página "Instâncias do Cloud SQL" no Console do Google Cloud Platform.

    Acessar a página "Instâncias do Cloud SQL"

  2. Clique no nome da instância para abrir a página Detalhes da instância.
  3. Selecione a guia Conexões.
  4. Role para baixo até a seção Configurar certificados do cliente SSL.
  5. Clique no nome de um certificado. A caixa de diálogo Certificado do Cliente SSL abrirá e mostrará o certificado do cliente (client-cert.pem).

gcloud

Recupere a chave pública do certificado do cliente com o comando ssl client-certs describe:

gcloud sql ssl client-certs describe [CERT_NAME] --instance=[INSTANCE_NAME] --format='value(cert)' > client-cert.pem

cURL

  1. Liste os certificados na instância para receber a impressão digital do certificado que você quer recuperar:

    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X GET \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]sslCerts
    

    Grave o campo sha1Fingerprint do certificado que você quer recuperar. Não inclua as aspas.

  2. Recupere o certificado:

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X GET \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/sslCerts/[FINGERPRINT]
    
  3. Copie todos os dados do certificado que estão entre aspas para um arquivo, por exemplo client-cert.pem. Não copie as aspas.

Exclusão de certificado do cliente

Console (Segunda geração)

  1. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud Platform.

    Acessar a página "Instâncias do Cloud SQL"

  2. Clique no nome da instância para abrir a página Detalhes da instância.
  3. Selecione a guia Conexões.
  4. Role para baixo até a seção Configurar certificados do cliente SSL.
  5. Localize o certificado a ser excluído e clique em Excluir..
  6. Na caixa de diálogo Excluir certificado do cliente, clique em OK.

Console (1ª geração)

Esta tarefa faz com que a instância do Cloud SQL seja reiniciada.

  1. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud Platform.

    Acessar a página "Instâncias do Cloud SQL"

  2. Clique no nome da instância para abrir a página Detalhes da instância.
  3. Selecione a guia Conexões.
  4. Role para baixo até a seção Configurar certificados do cliente SSL, localize o certificado a ser excluído e clique em excluir Excluir..
  5. Na caixa de diálogo Excluir certificado do cliente, clique em Reiniciar agora.

    É necessário reiniciar a instância para concluir a operação.

gcloud

Para as instâncias de primeira geração, esta tarefa requer a reinicialização da instância do Cloud SQL.

  1. Exclua o certificado do cliente usando o comando ssl client-certs delete:

    gcloud sql ssl client-certs delete [CERT_NAME] --instance=[INSTANCE_NAME]
    
  2. Se a instância for de primeira geração, reinicie-a:

    gcloud sql instances restart [INSTANCE_NAME]
    

cURL

Para as instâncias de primeira geração, esta tarefa requer a reinicialização da instância do Cloud SQL.

  1. Liste os certificados na instância para receber a impressão digital do certificado a ser excluído:

    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X GET \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/sslCerts
    

    Grave o campo sha1Fingerprint do certificado que você quer excluir. Não inclua as aspas.

  2. Exclua o certificado:

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         -X DELETE \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/sslCerts/[FINGERPRINT]
    
  3. Se a instância for de primeira geração, reinicie-a:

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Length: 0' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/restart
    

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Cloud SQL para MySQL