Šifrování a certifikáty Go-MSSQLDB

Ovladač go-mssqldb podporuje více šifrovacích režimů a strategie ověřování certifikátů pro připojení k SQL Server a Azure SQL. Tento článek vysvětluje každý režim šifrování, jak nastavit validaci certifikátů a kdy použít přísný režim TDS 8.0.

Vyberte konfiguraci TLS

Použijte tuto tabulku k výběru nejbezpečnější možnosti, která odpovídá vašemu prostředí, než nastavíte jednotlivé parametry.

Scénář Doporučená nastavení Proč
Azure SQL nebo SQL Server 2022 a pozdější verze a chcete nejsilnější výchozí ochranu encrypt=strict TDS 8.0 provádí TLS handshake před TDS vyjednáváním a vždy validuje certifikát.
Serverový certifikát navazuje na důvěryhodnou veřejnou nebo podnikovou certifikační autoritu encrypt=true Standardní ověření certifikátů obvykle stačí, když jsou název hostitele a řetězec důvěry již správné.
Server používá soukromou CA, která není v systémovém úložišti důvěry encrypt=true&certificate=/path/to/ca-cert.pem Přidává CA certifikát do vlastního fondu důvěr a zachovává normální řetězovou validaci.
Server používá samopodepsaný certifikát a vy chcete připnout certifikát encrypt=true&serverCertificate=/path/to/server.pem Porovnává přesný serverový certifikát bajt po bajtu místo spoléhání se na řetězec CA.
Pouze lokální vývojová nebo dočasná testovací prostředí encrypt=true&TrustServerCertificate=true Šifrování zůstává zapnuté, ale vynechává ověřování identity serveru. Toto nastavení v produkci nepoužívejte.

Šifrovací režimy

Nastavte encrypt parametr spojení na jednu z následujících hodnot:

Value Chování
strict Šifrování TDS 8.0. TLS handshake probíhá před vyjednáváním TDS spojení. Vyžaduje SQL Server 2022 nebo Azure SQL.
true nebo mandatory Spojení je zašifrováno po TDS prelogin handshake.
false nebo optional Šifrování se používá pouze tehdy, pokud to server vyžaduje. Toto je výchozí možnost, pokud není zadáno encrypt. Azure SQL vždy vyžaduje šifrování na straně serveru, takže připojení k Azure SQL je šifrované bez ohledu na toto nastavení.
disable Žádné šifrování. Nedoporučuje se pro produkční prostředí.

Příklad

Povolte šifrování v připojovací řetězec pomocí parametruencrypt:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true

Ověření certifikátu

Když povolíte šifrování (encrypt=true nebo encrypt=strict), ovladač ověřuje serverový certifikát, pokud nenastavíte TrustServerCertificate=true. Existují dva nezávislé přístupy k této validaci.

Řetězová validace pomocí parametru certificate

Uveďte soubor s certifikátem PEM nebo DER. Ovladač přidá certifikát do vlastního trustového poolu a provede standardní X.509 řetězovou validaci proti tomuto poolu:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&certificate=/path/to/ca-cert.pem

Porovnání na úrovni bajtů pomocí parametru serverCertificate

Note

Tento serverCertificate parametr byl zaveden ve verzi driver 1.9.6.

Uveďte soubor PEM nebo DER obsahující přesný certifikát serveru. Ovladač porovnává certifikát serveru bajt po bajtu s poskytnutým souborem. Ovladač neprovádí řetězovou validaci. Tento přístup je užitečný pro samopodepsané certifikáty:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&serverCertificate=/path/to/server.pem

Přepsání jména hostitele

Ve výchozím nastavení ovladač ověřuje, že běžné jméno certifikátu (CN) nebo subjektové alternativní jméno (SAN) odpovídá jménu hostitele serveru. Použijte hostnameincertificate k přepsání očekávaného názvu hostitele:

sqlserver://<user>:<password>@10.0.0.5:1433?database=AdventureWorks2025&encrypt=true&hostnameincertificate=<server>.domain.com

Přeskočit ověření certifikátu

Nastavte TrustServerCertificate=true tak, aby se přeskočilo veškeré ověřování certifikátů. Spojení je stále šifrované, ale identita serveru není ověřena:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&TrustServerCertificate=true

Caution

Nastavení TrustServerCertificate=true odhaluje spojení s útoky protivníka uprostřed. Tuto možnost používejte pouze pro vývoj a testování.

TDS 8.0 přísný režim

TDS 8.0 (přísné šifrování) provede navázání spojení TLS před jakýmkoli vyjednáváním protokolu TDS. Tento přístup zabraňuje útočníkovi v downgradování celého připojení. TDS 8.0 vyžaduje SQL Server 2022 nebo Azure SQL:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=strict

V přísném režimu je parametr TrustServerCertificate ignorován. Ověření certifikátů probíhá vždy, ve výchozím nastavení s použitím systémového úložiště důvěryhodných certifikátů. Můžete poskytnout certificate nebo serverCertificate pro vlastní ověření.

Minimální verze protokolu TLS

Použijte tlsmin parametr k vynucení minimální verze TLS:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&tlsmin=1.2

Platné hodnoty: 1.0, 1.1, 1.21.3.

Shrnutí parametrů šifrování

Parameter Výchozí Description
encrypt false Režim šifrování. Azure SQL vždy vyžaduje šifrování na straně serveru bez ohledu na toto nastavení.
TrustServerCertificate Závisí na encrypt Přeskočte ověření certifikátu, když true. Výchozí je tehdy false , kdy encrypt je specifikován, a true když encrypt je vynechán.
certificate - Cesta k souboru PEM/DER pro ověřování řetězce.
serverCertificate - Cesta k souboru PEM/DER pro porovnání po bajtech.
hostnameincertificate - Přepsat očekávaný název hostitele v certifikátu.
tlsmin - Minimální verze TLS.