2022 Update – This answer (as comments point out) provides an explanation and stop gap, but also offers some better recommendations including purchasing and installing a proper cert (thanks to numerous community edits).
Please see also the other highly voted answers in this thread, including the one by @Alex From Jitbit below about a breaking change when migrating from System.Data.Sql
to Microsoft.Data.Sql
(spoiler: Encrypt
is now set to true
by default).
Original answer:
You likely don’t have a CA signed certificate installed in your SQL VM’s trusted root store.
If you have Encrypt=True
in the connection string, either set that to off (not recommended), or add the following in the connection string (also not recommended):
TrustServerCertificate=True
SQL Server will create a self-signed certificate if you don’t install one for it to use, but it won’t be trusted by the caller since it’s not CA-signed, unless you tell the connection string to trust any server cert by default.
Long term, I’d recommend leveraging Let’s Encrypt to get a CA signed certificate from a known trusted CA for free, and install it on the VM. Don’t forget to set it up to automatically refresh. You can read more on this topic in SQL Server books online under the topic of “Encryption Hierarchy”, and “Using Encryption Without Validation”.