EF Core 7 - Conexões SQL Server com Encrypt igual a true
Neste artigo vou mostrar como a alteração do valor padrão da propriedade Encrypt, que agora é definida como true, pode afetar suas aplicações e como contornar o problema. |
Com o .NET 7 houve muitas alterações, e, uma delas, esta relacionada com o pacote System.Data.SqlClient, e, pode afetar a sua aplicação se não for tratada de forma correta.
Qual era o
comportamento anterior ao .NET 7 ?
As strings de conexão SqlClient usavam a
propriedade Encrypt=False
por padrão, e, isso permite conexões em máquinas de desenvolvimento onde o
servidor local não possui um certificado válido.
Qual o novo comportamento ?
A partir do .NET 7 as strings de conexão SqlClient utilizam por padrão Encrypt=True e isso significa que :
Se essas condições
não forem atendidas, será lançada um SqlException com a seguinte
mensagem :
(provider: SSL Provider, error: 0 - The certificate chain was
issued by an authority that is not trusted.)
Assim, se você definir a string de conexão, conforme abaixo:
public
class
AppDbContext
: DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( "Data Source=.;Initial Catalog=Demo;Integrated Security=True;"); } ... } |
Pode obter uma SqlException relacionada com a segunraça.
Essa alteração foi feita para garantir que, por padrão, a conexão seja segura ou o aplicativo falhará ao se conectar.
Como resolver o problema
Existem três formas de proceder para resolver ou contornar o problema se ele
surgir :
As opções 2 e 3 deixam o servidor em um estado inseguro e não deve ser usado em ambiente de produção.
Abaixo a string de conexão usando a propriedade TrustServerCertificate=True; :
public
class
AppDbContext
: DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( "Data Source=.;Initial Catalog=Demo;Integrated Security=True;TrustServerCertificate=True;"); } ... } |
A seguir a mesma string de conexão agora usando Encrypt=False; :
public
class
AppDbContext
: DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer( "Data Source=.;Initial Catalog=Demo;Integrated Security=True;Encrypt=False;"); } ... } |
E estamos conversados...
"Vai alta a
noite, e vem chegando o dia. Deixemos, pois, as obras das trevas e revistamo-nos
das armas da luz.
Andemos dignamente, como em pleno dia, não em orgias e bebedices, não em
impudicícias e dissoluções, não em contendas e ciúmes; mas revesti-vos do Senhor
Jesus Cristo e nada disponhais para a carne no tocante às suas concupiscências."
Romanos 13:12-14
Referências: