Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Použijte Transport Layer Security (TLS) k šifrování provozu mezi vaší aplikací a SQL Server. Nechte validaci serverových certifikátů zapnutou pro ověření identity serveru. Šifrování bez ověření identity nechrání před útočníkem typu man-in-the-middle, který se vydává za server.
Microsoft.Data.SqlClient ve výchozím nastavení používá Encrypt=Mandatory a TrustServerCertificate=false.
Encrypt=true je synonymem pro Mandatory. Pro vzdálené připojení explicitně požadujte tato nastavení a nastavte serverový certifikát, který klient může ověřit:
Server=tcp:<server>,1433;Database=<database>;Integrated Security=true;Encrypt=true;TrustServerCertificate=false;MultiSubnetFailover=true;
Nahraďte zástupné prvky a použijte autentizační metodu podporovanou vaším serverem a aplikačním prostředím. Pro Azure SQL nebo SQL databázi v Microsoft Fabric viz Microsoft Entra authentication.
Vyberte režim šifrování
Encrypt řídí, zda klient potřebuje šifrování. Server může také vyžadovat šifrování. Tato tabulka popisuje současné chování bez připnutí certifikátů:
| Klientské prostředí | Požadavek na server | Ověření certifikátu | Result |
|---|---|---|---|
Encrypt=Optional nebo false |
Nenutí to šifrování. | Žádné, bez ohledu na TrustServerCertificate. |
Šifrují se pouze přihlašovací pakety. Následný provoz není šifrován. |
Encrypt=Optional;TrustServerCertificate=false |
Nutí šifrování. | Důvěryhodný řetězec, validita a název serveru. | Veškerý provoz je šifrován. Neplatné certifikáty selžou spojení. |
Encrypt=Optional;TrustServerCertificate=true |
Nutí šifrování. | Přeskočeno. | Veškerý provoz je šifrován, ale identita serveru není ověřena. |
Encrypt=Mandatory;TrustServerCertificate=false |
Kterékoli nastavení. | Důvěryhodný řetězec, validita a název serveru. | Veškerý provoz je šifrován. Neplatné certifikáty selžou spojení. |
Encrypt=Mandatory;TrustServerCertificate=true |
Kterékoli nastavení. | Přeskočeno. | Veškerý provoz je šifrován, ale identita serveru není ověřena. |
Encrypt=Strict |
Podporuje tabulkový datový tok (TDS) 8.0. | Required.
TrustServerCertificate Nedá se to obejít. |
TLS začíná před zprávami TDS. Nepodporovaný server nebo neplatný certifikát způsobí selhání připojení. |
Použití Mandatory pro šifrovaná spojení na servery, které nepodporují TDS 8.0. Použijte Strict, když váš koncový bod podporuje TDS 8.0, včetně SQL Serveru 2022 (16.x) a novějších verzí. TDS 8.0 podporuje TLS 1.2 a TLS 1.3; nevyžaduje TLS 1.3. Vyjednávaná verze TLS také závisí na konfiguraci klienta, serveru a operačního systému.
Optional není řešením chyb certifikátů. Může nechat data aplikací nešifrovaná, pokud server šifrování nevyžaduje.
Konfigurace ověřitelného serverového certifikátu
Pro běžnou validaci certifikátů:
- Zřiďte certifikát, který splňuje požadavky na certifikát SQL Server.
- Do pole Subject Alternative Name (SAN) certifikátu zahrňte název, který klienti používají k připojení.
- Zajistěte, aby vystavující certifikační autorita a všechny požadované mezilehlé certifikáty byly důvěryhodné na každém klientském hostiteli nebo v kontejneru.
- Nakonfigurujte SQL Server tak, aby používal certifikát, a ponechte
TrustServerCertificate=falsena klientech. - Naplánujte obnovení certifikátu před vypršením jeho platnosti, včetně případných změn názvů nebo vydávajících autorit.
Certifikát od veřejné nebo podnikové certifikační autority může tyto požadavky splnit. Podnikový certifikát není automaticky důvěryhodný uvnitř linuxového kontejneru ani na samostatném vývojářském počítači.
Spojit se přes alias
Pokud spojení používá alias Domain Name System (DNS), který není v certifikátu, nejprve zvažte vydání certifikátu, který alias obsahuje. Případně nastavte HostNameInCertificate na očekávaný název uvedený v certifikátu:
Server=tcp:sql-alias.contoso.com,1433;Database=<database>;Integrated Security=true;Encrypt=true;TrustServerCertificate=false;HostNameInCertificate=sql-server.contoso.com;MultiSubnetFailover=true;
HostNameInCertificate mění jméno, které SqlClient očekává během validace certifikátu. Nemění síťový cíl ani neobchází kontroly řetězce důvěry a platnosti. Nechte to nenastavené, když už název serveru odpovídá certifikátu.
Připněte konkrétní serverový certifikát
ServerCertificate poskytuje lokální certifikátový soubor pro přesné srovnání s certifikátem serveru. Podporované formáty jsou Privacy-Enhanced Mail (PEM) a Distinguished Encoding Rules (DER), včetně .cer certifikátových souborů. Použijte ji s Encrypt=Mandatory nebo Encrypt=Strict, a ponechejte TrustServerCertificate=false.
Server=tcp:<server>,1433;Database=<database>;Integrated Security=true;Encrypt=Strict;TrustServerCertificate=false;ServerCertificate=C:\certificates\sql-server.cer;MultiSubnetFailover=true;
Distribuujte očekávaný certifikát důvěryhodným kanálem a chraňte soubor před nahrazením. Přesná shoda certifikátů je alternativou k běžnému ověřování řetězce a jmen, nikoli další kontrolou nad tím. Bajty certifikátu musí odpovídat; stejné jméno subjektu nebo veřejný klíč samotný nestačí. Chybějící, nečitelný, neplatný nebo nesouladný PIN soubor neprojde ověřením.
Pinning váže nasazení klienta na rotaci certifikátů. Aktualizujte PIN při změně certifikátu serveru, včetně obnovy. Nezískávejte PIN tím, že přijmete neověřený certifikát ze sítě.
SqlClient neposkytuje veřejný mechanismus zpětného volání pro vlastní ověřování certifikátu serveru TLS.
AccessTokenCallback řídí získávání autentizačního tokenu, nikoli validaci TLS.
Vývojové certifikáty a řešení problémů
Použijte důvěryhodný vývojový certifikát se správným názvem serveru. Pokud dočasně použijete TrustServerCertificate=true s With Encrypt=true v izolovaném vývojovém prostředí, připojení je šifrované, ale klient neautentizuje certifikát serveru.
Upozornění
Nenasazujte TrustServerCertificate=true jako opravu chyb certifikátů v produkčním prostředí. Tím se deaktivuje ověřování identity serveru u Mandatory a nemá to žádný vliv u Strict.
| Failure | Zkontrolujte |
|---|---|
| Řetězci certifikátů se nevěří. | Nainstalujte do klienta příslušný důvěryhodný kořenový certifikát a zprostředkující certifikáty. Ověřte si certifikát, který SQL Server skutečně předkládá. |
| Název certifikátu nesedí. | Porovnejte Server s certifikátem SAN. Opravte název, certifikát nebo záměrné přepsání HostNameInCertificate. |
| Certifikát je propadlý. | Obnovte certifikát serveru a zkontrolujte klientský takt. |
| Připnutý certifikát nesedí nebo ho nelze načíst. | Zkontrolujte cestu k souboru, oprávnění, formát a nasazený certifikát. Aktualizujte PIN prostřednictvím vašeho důvěryhodného distribučního procesu. |
| S přísným šifrováním se nelze připojit. | Potvrďte, že koncový bod podporuje TDS 8.0 a že jeho konfigurace TLS je kompatibilní s klientem. |
Pro konfiguraci na straně serveru viz přehled Certifikát.
Změny chování šifrování a ověřování certifikátů
Tyto poznámky k kompatibilitě vysvětlují změny chování při aktualizaci starších aplikací. Nové aplikace by měly používat současná nastavení popsaná v tomto článku.
| Uvolnění ovladačů | Změnit |
|---|---|
| 1.0 |
Encrypt=false je výchozí hodnota. Když klient nepožaduje šifrování, serverem vynucené šifrování nespustí ověření certifikátu. |
| 2.0 | Šifrování vynucené serverem respektuje TrustServerCertificate i když Encrypt=false. |
| 4.0 | Šifrování se automaticky zapne. Upgrady mohou odhalit dříve nepovšimnuté chyby v konfiguraci certifikátu. |
| 5.0 | Přidává Optional, Mandatory, Strict, a HostNameInCertificate. |
| 5.1 | Přidává ServerCertificate pro připínání certifikátů. |
| 7.0.3 | Opravuje ověřování certifikátu v řízených sítích, aby selhalo a zavřelo se kvůli chybějícím, neplatným nebo neshodným souborům, i když běžná validace platformy uspěje. |