Criptografar conexões de clientes com instâncias de banco de dados do MySQL com SSL/TLS - Amazon Relational Database Service

Criptografar conexões de clientes com instâncias de banco de dados do MySQL com SSL/TLS

O Secure Sockets Layer (SSL) é um protocolo padrão do setor para proteger as conexões de rede entre o cliente e o servidor. Após o SSL versão 3.0, o nome mudou para Transport Layer Security (TLS). O Amazon RDS é compatível com criptografia SSL/TLS para instâncias de banco de dados do MySQL. Usando o SSL/TLS, você pode criptografar uma conexão entre seu cliente de aplicação e sua instância de banco de dados do MySQL. A compatibilidade com SSL/TLS está disponível em todas as Regiões da AWS para MySQL.

Usar o SSL/TLS com uma instância de banco de dados do MySQL

O Amazon RDS cria um certificado SSL/TLS e instala o certificado na instância de banco de dados quando o Amazon RDS provisionar a instância. Esses certificados são assinados por uma autoridade de certificado. O certificado SSL/TLS inclui o endpoint da instância de banco de dados como o nome comum (CN) do certificado SSL/TLS para se proteger contra ataques de falsificação.

Um certificado SSL/TLS criado pelo Amazon RDS é a entidade raiz confiável e deve funcionar na maioria dos casos, mas poderá falhar se sua aplicação não aceitar cadeias de certificados. Se sua aplicação não aceitar cadeias de certificados, talvez seja necessário usar um certificado intermediário para se conectar à sua Região da AWS. Por exemplo, é necessário usar um certificado intermediário para se conectar às regiões AWS GovCloud (US) usando SSL/TLS.

Para obter informações sobre como baixar certificados, consulte Usar SSL/TLS para criptografar uma conexão com uma instância ou um cluster de banco de dados. Para obter mais informações sobre como usar o SSL/TLS com o MySQL, consulte Atualizar aplicações para conexão com instâncias de banco de dados MySQL usando novos certificados SSL/TLS.

O MySQL usa OpenSSL para proteger as conexões. O Amazon RDS para MySQL é compatível com as versões 1.0, 1.1, 1.2 e 1.3 do Transport Layer Security (TLS). O suporte ao TLS depende da versão do MySQL. A tabela a seguir mostra o suporte a TLS para as versões do MySQL.

Versão do MySQL TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3

MySQL 8.0

Sem compatibilidade

Não suportado

Compatível

Compatível

MySQL 5.7

Compatível

Compatível

Compatível

Sem compatibilidade

É possível exigir conexões SSL/TLS para determinadas contas de usuários. Por exemplo, você pode usar uma das seguintes instruções (dependendo da sua versão do MySQL) para exigir conexões SSL/TLS na conta de usuário encrypted_user.

Para fazer isso, use a instrução a seguir.

ALTER USER 'encrypted_user'@'%' REQUIRE SSL;

Para obter mais informações sobre conexões SSL/TLS com MySQL, consulte Using encrypted connections (Usar conexões criptografadas) na documentação do MySQL.

Exigir SSL/TLS para todas as conexões com uma instância de banco de dados do MySQL

Use o parâmetro require_secure_transport para exigir que todas as conexões de usuários à sua instância de banco de dados do MySQL usem SSL/TLS. Por padrão, o parâmetro require_secure_transport é definido como OFF. Você pode definir o parâmetro require_secure_transport como ON para exigir SSL/TLS para conexões com a sua instância de banco de dados.

Você pode definir o valor de parâmetro require_secure_transport atualizando o grupo de parâmetros do banco de dados de sua instância de banco de dados. Você não precisa reinicializar sua instância de banco de dados para que a alteração entre em vigor.

Quando o parâmetro require_secure_transport é definido como ON para uma instância de banco de dados, um cliente de banco de dados poderá se conectar a ela se puder estabelecer uma conexão criptografada. Caso contrário, uma mensagem de erro semelhante à seguinte é retornada para o cliente:

MySQL Error 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.

Para obter informações sobre como configurar parâmetros, consulte Modificar parâmetros em um grupo de parâmetros de banco de dados no Amazon RDS.

Para obter mais informações sobre o parâmetro require_secure_transport, consulte a documentação do MySQL.

Conectar-se a partir do cliente de linha de comando do MySQL com SSL/TLS (criptografado)

Os parâmetros mysql do programa cliente serão ligeiramente diferentes, se você estiver usando a versão do MySQL 5.7, a versão do MySQL 8.0 ou a versão do MariaDB.

Para descobrir qual versão você tem, execute o comando mysql com a opção --version. No exemplo a seguir, a saída mostra que o programa cliente é do MariaDB.

$ mysql --version mysql Ver 15.1 Distrib 10.5.15-MariaDB, for osx10.15 (x86_64) using readline 5.1

A maioria das distribuições Linux, como o Amazon Linux, CentOS, SUSE e Debian, substituiu o MySQL pelo MariaDB, e a versão do mysql neles é de MariaDB.

Para conectar-se à sua instância de banco de dados usando o SSL/TLS, siga estas etapas:

Como conectar-se a uma instância de banco de dados com o SSL/TLS usando o cliente de linha de comando do MySQL
  1. Você pode baixar um certificado raiz que funciona para todas as Regiões da AWS.

    Para obter informações sobre como baixar certificados, consulte Usar SSL/TLS para criptografar uma conexão com uma instância ou um cluster de banco de dados.

  2. Use um cliente da linha de comando do MySQL para conectar-se a uma instância de banco de dados com criptografia SSL/TLS. Para o parâmetro -h, substitua o nome do DNS (endpoint) da instância de banco de dados. Para o parâmetro --ssl-ca, substitua o nome do arquivo de certificado SSL/TLS. Para o parâmetro -P, substitua a porta da sua instância de banco de dados. Para o parâmetro -u, substitua o nome de usuário de um usuário de banco de dados válido, como o usuário principal. Digite a senha do usuário mestre quando lhe for solicitado.

    O exemplo a seguir mostra como iniciar o cliente usando o parâmetro --ssl-ca com o MySQL 5.7 e versões posteriores.

    mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=REQUIRED -P 3306 -u myadmin -p

    Para exigir que a conexão SSL/TLS verifique o endpoint da instância de banco de dados em relação ao endpoint no certificado SSL/TLS, insira o seguinte comando:

    mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=VERIFY_IDENTITY -P 3306 -u myadmin -p

    O exemplo a seguir mostra como iniciar o cliente usando o parâmetro --ssl-ca usando o cliente MariaDB:

    mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl -P 3306 -u myadmin -p
  3. Digite a senha do usuário mestre quando lhe for solicitado.

Você verá uma saída semelhante à seguinte.

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9738 Server version: 8.0.28 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>