Se eu entendi a especificação do MSDN corretamente, tudo que você precisa é especificar na string de conexão Encrypt=True;TrustServerCertificate=True
. Isso significa que o cliente solicita criptografia e está disposto a aceitar qualquer certificado que o servidor possa usar . O servidor sempre tem um certificado autoassinado gerado na inicialização do servidor para usar, se nada mais estiver disponível. Se o cliente estiver disposto a aceitar qualquer certificado , então ele aceitará aquele auto-assinado temporário do servidor, é tão bom quanto qualquer outro.
O que essa configuração fornece é um canal de comunicação criptografado entre seu aplicativo e seu servidor, um canal que não pode ser ouvido com facilidade. No entanto, o canal está aberto a um ataque malicioso do tipo man-in-the-middle. Se um invasor puder enganar o cliente para conectar-se a ele em vez do servidor (por exemplo, controlando os registros DNS, mais exatamente o IP do servidor DNS que o cliente usará, que é uma configuração DHCP trivial). para controlar) então o atacante pode apresentar qualquer certificado e o cliente irá aceitá-lo, ele pode fazer a autenticação completa com o cliente, obtendo assim o nome de usuário e senha SQL usados, então ele pode conecte-se ao servidor verdadeiro e avance para frente e para trás em toda a comunicação, com uma visão livre de todo o conteúdo. O cliente nunca saberá que está sendo 'monitorado'. Este é o ataque "man-in-the-middle".
Para evitar a situação acima, o cliente deve remover o TrustServerCertificate=True
da string de conexão. Uma vez feito isso, o certificado usado pelo servidor tem para ser confiado pelo cliente, e é aí que surgem todas as complicações. Se você está bem com uma configuração mais fraca em que você tem um tráfego criptografado, mas você entende que você pode estar sujeito a um ataque man-in-the-middle e você está OK, então use a configuração muito mais simples de TrustServerCertificate=True
. Se não, infelizmente você deve realmente entender o que está fazendo e não é trivial. Se os dados forem tão importantes, talvez seja necessário distribuir o dinheiro para que um certificado VeriSign, Thawte ou GlobalSign (estes são as três raízes confiáveis de todos os clientes Windows) para seu servidor (~ $ 500 / ano) seja não tão estranho.