Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Sterownik go-mssqldb obsługuje wiele trybów szyfrowania oraz strategii walidacji certyfikatów dla połączeń z SQL Server i Azure SQL. Ten artykuł wyjaśnia każdy tryb szyfrowania, jak skonfigurować walidację certyfikatów oraz kiedy stosować tryb ścisły TDS 8.0.
Wybierz konfigurację TLS
Użyj tej tabeli, aby wybrać najbezpieczniejszą opcję pasującą do Twojego środowiska, zanim dostosujesz poszczególne parametry.
| Scenario | Zalecane ustawienia | Dlaczego |
|---|---|---|
| Azure SQL lub SQL Server 2022 i nowsze wersje – chcesz mieć najsilniejszą domyślną ochronę | encrypt=strict |
TDS 8.0 wykonuje handshake TLS przed negocjacjami TDS i zawsze waliduje certyfikat. |
| Certyfikat serwera łączy się z zaufanym publicznym lub korporacyjnym CA | encrypt=true |
Standardowa walidacja certyfikatów zwykle wystarcza, gdy nazwa hosta i łańcuch zaufania są już poprawne. |
| Serwer korzysta z prywatnego CA, który nie znajduje się w systemowym magazynie zaufania | encrypt=true&certificate=/path/to/ca-cert.pem |
Dodaje certyfikat CA do niestandardowej puli zaufania i zachowuje normalną walidację łańcuchową. |
| Serwer używa certyfikatu z podpisem własnym i chcesz stosować pinning certyfikatu | encrypt=true&serverCertificate=/path/to/server.pem |
Porównuje dokładny certyfikat serwera bajt po bajcie, zamiast polegać na łańcuchu CA. |
| Tylko lokalne środowisko programistyczne lub tymczasowe środowiska testowe | encrypt=true&TrustServerCertificate=true |
Szyfrowanie jest włączone, ale pomija weryfikację tożsamości serwera. Nie używaj tego ustawienia w produkcji. |
Tryby szyfrowania
Ustaw encrypt parametr połączenia na jedną z następujących wartości:
| Wartość | Behavior |
|---|---|
strict |
Szyfrowanie TDS 8.0. Handshake TLS odbywa się przed negocjacjami połączenia TDS. Wymaga SQL Server 2022 lub Azure SQL. |
true lub mandatory |
Połączenie jest szyfrowane po uzgodnieniu wstępnym TDS. |
false lub optional |
Szyfrowanie jest stosowane tylko wtedy, gdy serwer tego wymaga. Jest to wartość domyślna, gdy nie określono encrypt. Azure SQL zawsze wymaga szyfrowania po stronie serwera, więc połączenia z Azure SQL są szyfrowane niezależnie od tego ustawienia. |
disable |
Brak szyfrowania. Niezalecane w środowisku produkcyjnym. |
Example
Włącz szyfrowanie w parametry połączenia, używając parametruencrypt:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true
Walidacja certyfikatu
Gdy włączasz szyfrowanie (encrypt=true lub encrypt=strict), sterownik weryfikuje certyfikat serwera, chyba że ustawisz TrustServerCertificate=true. Istnieją dwa niezależne podejścia do tej weryfikacji.
Walidacja łańcuchowa za pomocą parametru certificate
Dostarcz plik certyfikatu PEM lub DER. Sterownik dodaje certyfikat do niestandardowej puli zaufania i wykonuje standardową weryfikację łańcucha X.509 względem tej puli:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&certificate=/path/to/ca-cert.pem
Porównanie na poziomie bajtów za pomocą parametru serverCertificate
Uwaga / Notatka
Parametr ten został wprowadzony serverCertificate w sterowniku v1.9.6.
Dostarcz plik PEM lub DER zawierający dokładny certyfikat serwera. Sterownik porównuje certyfikat serwera bajt po bajcie z dostarczonym plikiem. Sterownik nie wykonuje walidacji łańcuchowej. To podejście jest przydatne dla certyfikatów podpisanych samodzielnie:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&serverCertificate=/path/to/server.pem
Zastąpienie nazwy hosta
Domyślnie sterownik weryfikuje, czy nazwa Common Name (CN) lub Subject Alternative Name (SAN) certyfikatu zgadza się z nazwą hosta serwera. Użyj hostnameincertificate, aby zastąpić oczekiwaną nazwę hosta:
sqlserver://<user>:<password>@10.0.0.5:1433?database=AdventureWorks2025&encrypt=true&hostnameincertificate=<server>.domain.com
Pominięcie walidacji certyfikatów
Ustaw TrustServerCertificate=true tak, aby pomijać wszystkie weryfikacje certyfikatów. Połączenie jest nadal szyfrowane, ale tożsamość serwera nie jest zweryfikowana:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&TrustServerCertificate=true
Uwaga
Ustawienie TrustServerCertificate=true naraża połączenie na ataki typu adversary-in-the-middle. Używaj tej opcji tylko do rozwoju i testowania.
TDS 8.0 tryb ścisły
TDS 8.0 (ścisłe szyfrowanie) wykonuje handshake TLS przed jakimikolwiek negocjacjami protokołu TDS. Takie podejście zapobiega atakującemu obniżeniu jakości całego połączenia. TDS 8.0 wymaga SQL Server 2022 lub Azure SQL:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=strict
W trybie ścisłym parametr TrustServerCertificate jest ignorowany. Walidacja certyfikatów jest zawsze wykonywana z użyciem domyślnie systemowego magazynu zaufanych certyfikatów. Możesz podać certificate lub serverCertificate na potrzeby niestandardowej walidacji.
Wersja minimalna protokołu TLS
Użyj parametru tlsmin do wymuszenia minimalnej wersji TLS:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&tlsmin=1.2
Prawidłowe wartości: 1.0, , 1.11.2, 1.3.
Podsumowanie parametrów szyfrowania
| Parameter | Default | Description |
|---|---|---|
encrypt |
false |
Tryb szyfrowania. Azure SQL zawsze wymaga szyfrowania po stronie serwera, niezależnie od tego ustawienia. |
TrustServerCertificate |
Zależy od encrypt |
Pomiń sprawdzanie certyfikatu, gdy true. Domyślnie jest to, false gdy encrypt jest określone, a true gdy encrypt jest pomijane. |
certificate |
- | Ścieżka pliku PEM/DER na potrzeby walidacji łańcucha. |
serverCertificate |
- | Ścieżka pliku PEM/DER do porównania na poziomie bajtów. |
hostnameincertificate |
- | Nadpisz oczekiwaną nazwę hosta w certyfikacie. |
tlsmin |
- | Minimalna wersja TLS. |