Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruik Transport Layer Security (TLS) om het verkeer tussen je applicatie en SQL Server te versleutelen. Houd validatie van servercertificaten ingeschakeld om de identiteit van de server te verifiëren. Versleuteling zonder identiteitsvalidatie beschermt niet tegen een tegenstander in het midden die zich voordoet als de server.
Microsoft. Data.SqlClient is standaard op Encrypt=Mandatory en TrustServerCertificate=false.
Encrypt=true is een synoniem voor Mandatory. Voor een externe verbinding vraag expliciet deze instellingen op en stel een servercertificaat in dat de client kan valideren:
Server=tcp:<server>,1433;Database=<database>;Integrated Security=true;Encrypt=true;TrustServerCertificate=false;MultiSubnetFailover=true;
Vervang de tijdelijke aanduidingen en gebruik een authenticatiemethode die wordt ondersteund door je server en applicatieomgeving. Voor Azure SQL of SQL-databases in Microsoft Fabric, zie Microsoft Entra authenticatie.
Kies een encryptiemodus
Encrypt bepaalt of de client encryptie vereist. Een server kan ook encryptie vereisen. Deze tabel beschrijft het huidige gedrag zonder certificaatpinning:
| Klantinstelling | Serververeiste | Certificaatvalidatie | Resultaat |
|---|---|---|---|
Encrypt=Optional of false |
Dwingt geen encryptie af. | Geen, ongeacht TrustServerCertificate. |
Alleen inlogpakketten zijn versleuteld. Het daaropvolgende verkeer is niet versleuteld. |
Encrypt=Optional;TrustServerCertificate=false |
Dwingt encryptie af. | Vertrouwensketen, geldigheid en servernaam. | Al het verkeer is versleuteld. Ongeldige certificaten laten de verbinding falen. |
Encrypt=Optional;TrustServerCertificate=true |
Dwingt encryptie af. | Omzeild. | Al het verkeer is versleuteld, maar de identiteit van de server wordt niet geverifieerd. |
Encrypt=Mandatory;TrustServerCertificate=false |
Beide instellingen. | Vertrouwensketen, geldigheid en servernaam. | Al het verkeer is versleuteld. Ongeldige certificaten laten de verbinding falen. |
Encrypt=Mandatory;TrustServerCertificate=true |
Beide instellingen. | Omzeild. | Al het verkeer is versleuteld, maar de identiteit van de server wordt niet geverifieerd. |
Encrypt=Strict |
Ondersteunt Tabular Data Stream (TDS) 8.0. | Required.
TrustServerCertificate Kan het niet omzeilen. |
TLS start vóór de TDS-berichten. Een niet-ondersteunde server of een ongeldig certificaat faalt de verbinding. |
Mandatory Gebruik voor versleutelde verbindingen met servers die TDS 8.0 niet ondersteunen. Gebruik Strict wanneer je endpoint TDS 8.0 ondersteunt, inclusief SQL Server 2022 (16.x) en latere versies. TDS 8.0 ondersteunt TLS 1.2 en TLS 1.3; het vereist geen TLS 1.3. De onderhandelde TLS-versie hangt ook af van de configuratie van de client, server en besturingssysteem.
Optional is geen oplossing voor certificaatfouten. Het kan applicatiegegevens onversleuteld achterlaten als de server geen encryptie vereist.
Configureer een verifieerbaar servercertificaat
Voor normale certificaatvalidatie:
- Een certificaat leveren dat voldoet aan de SQL Server-certificaatvereisten.
- Vermeld in de alternatieve subjectnaam (SAN) van het certificaat de naam die cliënten gebruiken om verbinding te maken.
- Maak de uitgevende certificaatautoriteit en eventuele benodigde tussenliggende certificaten betrouwbaar op elke clienthost of container.
- Configureer SQL Server om het certificaat te gebruiken en behoud
TrustServerCertificate=falsein clients. - Verlenging van het plancertificaat vóór vervaldatum, inclusief eventuele wijzigingen in namen of uitgevende autoriteiten.
Een certificaat van een openbare of bedrijfscertificeringsinstantie kan aan deze eisen voldoen. Een enterprise-certificaat wordt niet automatisch vertrouwd binnen een Linux-container of op een aparte ontwikkelaarcomputer.
Verbind via een alias
Als de verbinding een Domain Name System (DNS) alias gebruikt die niet in het certificaat staat, overweeg dan eerst een certificaat uit te geven dat de alias bevat. U kunt ook HostNameInCertificate instellen op de naam die in het certificaat wordt verwacht:
Server=tcp:sql-alias.contoso.com,1433;Database=<database>;Integrated Security=true;Encrypt=true;TrustServerCertificate=false;HostNameInCertificate=sql-server.contoso.com;MultiSubnetFailover=true;
HostNameInCertificate verandert de naam die SqlClient verwacht tijdens certificaatvalidatie. Het verandert de netwerkbestemming niet en omzeilt ook geen trustchain- en vervalcontroles. Laat het niet ingesteld als de servernaam al overeenkomt met het certificaat.
Een specifiek servercertificaat vastzetten
ServerCertificate levert een lokaal certificaatbestand voor exacte vergelijking met het certificaat van de server. Ondersteunde formaten zijn Privacy-Enhanced Mail (PEM) en Distinguished Encoding Rules (DER), inclusief .cer certificaatbestanden. Gebruik het met Encrypt=Mandatory of Encrypt=Strict, en houd TrustServerCertificate=false.
Server=tcp:<server>,1433;Database=<database>;Integrated Security=true;Encrypt=Strict;TrustServerCertificate=false;ServerCertificate=C:\certificates\sql-server.cer;MultiSubnetFailover=true;
Verspreid het verwachte certificaat via een vertrouwd kanaal en bescherm het bestand tegen vervanging. Een exacte certificaatmatch is een alternatief voor normale chain- en naamvalidatie, geen extra controle daarbovenop. De certificaatbytes moeten overeenkomen; dezelfde subjectnaam of publieke sleutel alleen is niet voldoende. Een ontbrekend, onleesbaar, ongeldig of niet overeengekomen pin-bestand faalt validatie.
Pinning koppelt de uitrol van clients aan certificaatvernieuwing. Werk de pincode bij wanneer het servercertificaat verandert, inclusief verlenging. Krijg geen pincode door een niet-geverifieerd certificaat van het netwerk te accepteren.
SqlClient biedt geen publieke callback voor willekeurige TLS-servercertificaatvalidatie.
AccessTokenCallback controleert de verwerving van authenticatietokens, niet de TLS-validatie.
Ontwikkelingscertificaten en probleemoplossing
Gebruik een vertrouwd ontwikkelcertificaat met de juiste servernaam. Als je tijdelijk TrustServerCertificate=true gebruikt in Encrypt=true een geïsoleerde ontwikkelomgeving, is de verbinding versleuteld maar authenticeert de client het servercertificaat niet.
Waarschuwing
Gebruik TrustServerCertificate=true niet als oplossing voor productieomgevingen bij certificaatfouten. Het schakelt serveridentiteitsvalidatie uit met Mandatory en heeft geen effect met Strict.
| Failure | Controle |
|---|---|
| De certificaatketen is niet vertrouwd. | Installeer het juiste vertrouwde hoofdcertificaat en de tussenliggende certificaten op de client. Controleer het certificaat dat SQL Server daadwerkelijk presenteert. |
| De naam van het certificaat komt niet overeen. | Vergelijk Server met de SAN van het certificaat. Corrigeer de naam, het certificaat of de opzettelijke HostNameInCertificate override. |
| Certificaat is verlopen. | Verleng het servercertificaat en controleer de clientklok. |
| Het vastgepinde certificaat komt niet overeen of kan niet worden geladen. | Controleer het bestandspad, de rechten, het formaat en het gedeployte certificaat. Werk de pincode bij via je vertrouwde distributieproces. |
| Strikte encryptie kan niet verbinden. | Bevestig dat het eindpunt TDS 8.0 ondersteunt en dat de TLS-configuratie compatibel is met de client. |
Voor server-side configuratie, zie Certificaatoverzicht.
Wijzigingen in versleutelings- en certificaatvalidatiegedrag
Deze compatibiliteitsnotities leggen gedragsveranderingen uit bij het upgraden van oudere applicaties. Nieuwe applicaties dienen de huidige instellingen te gebruiken die in dit artikel zijn beschreven.
| Stuurprogrammaversie | Veranderen |
|---|---|
| 1.0 |
Encrypt=false is de standaardwaarde. Wanneer de client geen encryptie aanvraagt, activeert server-gedwongen encryptie geen certificaatvalidatie. |
| 2.0 | Server-gedwongen encryptie honoreert TrustServerCertificate zelfs wanneer Encrypt=false. |
| 4.0 | Encryptie wordt standaard ingeschakeld. Upgrades kunnen eerder onopgemerkte certificaatconfiguratiefouten blootleggen. |
| 5.0 | Voegt Optional, Mandatory, Strict, en HostNameInCertificate. |
| 5.1 | Voegt toe ServerCertificate voor certificaatpinnen. |
| 7.0.3 | Verhelpt de validatie van certificaatpinnen voor beheerde netwerkverbindingen, zodat deze wordt geweigerd bij ontbrekende, ongeldige of niet-overeenkomende bestanden, zelfs wanneer de standaardplatformvalidatie slaagt. |