Encriptando a conexão do SQL Server usando SSL

Olá,

Uma boa prática para a segurança de nosso banco de dados é utilizar certificados para criptografar os dados trafegados, protegendo de algum espião com um “sniffer” de rede.

Em uma instalação padrão do MS SQL Server é relativamente simples de capturar o conteúdo dos pacotes, como mostram as figuras abaixo:

Aqui eu fiz uma consulta qualquer no SQL, executei a query “select * from sys.databases” para mostrar todas as bases de dados instaladas na instância.

E, utilizando o Microsoft Network Monitor, obtive o conteúdo da query através da análise do pacote trafegado na rede:

E também do resultado da query:

Para resolver isso vamos habilitar a encriptação do protocolo utilizado no SQL Server, o processo é bem simples, importar o certificado no servidor e configurar o serviço do SQL Server, para os nossos testes vamos criar um certificado auto-assinado utilizando o utilitário makecert da microsoft, disponível no SDK do .Net Framework ou no Visual Studio.

makecert -r -pe -n “CN=brunosql1” -b 01/01/2000 -e 01/01/2050 -eku 1.3.6.5.7.3.1 -ss my -sr localMachine -sky exchange -sp “Microsoft RSA SChannel Cryptographic Provider” -sy 12

Para maiores informações sobre o makecert e sua sintaxe consulte http://msdn.microsoft.com/en-us/library/windows/desktop/aa386968(v=vs.85).aspx

Criado o certificado vá em Iniciar > Executar e digite mmc e no aplicativo adicione o snap-in Certificates > Local Computer e verifique na pasta Personal\Certificates se o certificado foi criado lá:

Agora copie o certificado criado para a pasta Trusted Root Certification Authorities (utilizando ctrl+c e ctrl+v mesmo!)

Feita a configuração do certificado, o próximo passo é configurar o SQL Server para utilizar esse certificado, para isso vamos abrir o SQL Server Configuration Manager e clicar com o botão direito na opção “Protocols for MSSQLSERVER” (aqui na minha configuração o MSSQLSERVER é o nome da instância default, podendo variar conforme configuração) e selecionar Properties:

Na guia Flags altere a opção Force Encription para YES, assim todas as conexões deverão obrigatoriamente ser encriptadas.

E na guia Certificate selecione o certificado que foi importado anteriormente.

Após essa configuração será necessário reiniciar o serviço do SQL Server.

Para testarmos vamos executar a mesma query utilizada anteriormente (select * from sys.databases) e vamos analisar os pacotes com o Network Monitor:

Podemos verificar que o protocolo mudou de TDS para TLS e agora não é mais possível visualizar o conteúdo trafegado no SQL Server.