Go-mssqlDB-kryptering och certifikat

Drivrutinen go-mssqldb stöder flera krypteringsmetoder och certifikatvalideringsstrategier för anslutningar till SQL Server och Azure SQL. Den här artikeln förklarar varje krypteringsläge, hur man konfigurerar certifikatvalidering och när man ska använda TDS 8.0 strikt läge.

Välj en TLS-konfiguration

Använd denna tabell för att välja det säkraste alternativet som passar din miljö innan du justerar individuella parametrar.

Scenario Rekommenderade inställningar Varför
Azure SQL eller SQL Server 2022 och senare versioner, och du vill ha det starkaste standardskyddet encrypt=strict TDS 8.0 utför TLS-handskakningen före TDS-förhandling och validerar alltid certifikatet.
Servercertifikatet kedjas till en betrodd offentlig eller företagsbaserad CA encrypt=true Standardvalidering av certifikat räcker vanligtvis när värdnamnet och förtroendekedjan redan är korrekta.
Servern använder en privat CA som inte finns i systemets förtroendelagring encrypt=true&certificate=/path/to/ca-cert.pem Lägger till CA-certifikatet i en anpassad förtroendepool och behåller normal kedjevalidering.
Servern använder ett självsignerat certifikat och du vill använda certifikatbindning encrypt=true&serverCertificate=/path/to/server.pem Jämför det exakta servercertifikatet byte för byte istället för att förlita sig på en CA-kedja.
Endast lokal utveckling eller tillfälliga testmiljöer encrypt=true&TrustServerCertificate=true Behåller kryptering på, men hoppar över verifiering av serveridentitet. Använd inte denna inställning i produktionen.

Krypteringslägen

Sätt anslutningsparametern encrypt till ett av följande värden:

Value Behavior
strict TDS 8.0-kryptering. TLS-handslaget sker innan förhandlingen om TDS-anslutningen. Kräver SQL Server 2022 eller Azure SQL.
true eller mandatory Anslutningen krypteras efter TDS-förinloggningshandskakningen.
false eller optional Kryptering används endast om servern kräver det. Detta är standardinställningen när encrypt inte specificeras. Azure SQL kräver alltid kryptering på serversidan, så anslutningar till Azure SQL krypteras oavsett denna inställning.
disable Ingen kryptering. Rekommenderas inte för produktion.

Exempel

Aktivera kryptering i reťazec pripojenia genom att använda parameternencrypt:

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

Certifikatverifiering

När du aktiverar kryptering (encrypt=true eller encrypt=strict), validerar drivrutinen servercertifikatet om du inte sätter TrustServerCertificate=true. Två oberoende metoder finns för denna validering.

Kedjevalidering med hjälp av parametern certificate

Tillhandahåll en PEM- eller DER-certifikatfil. Drivrutinen lägger till certifikatet i en anpassad förtroendepool och utför standard X.509-kedjevalidering mot den poolen:

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

Bytenivåjämförelse med hjälp av parametern serverCertificate

Note

Parametern serverCertificate introducerades i drivrutin v1.9.6.

Tillhandahåll en PEM- eller DER-fil som innehåller exakt servercertifikat. Drivrutinen jämför serverns certifikat byte för byte med den tillhandahållna filen. Drivrutinen utför inte validering av kedjan. Denna metod är användbar för självsignerade certifikat:

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

Åsidosättande av värdnamn

Som standard validerar drivrutinen att certifikatets Common Name (CN) eller Subject Alternative Name (SAN) matchar serverns värdnamn. Använd hostnameincertificate för att åsidosätta det förväntade värdnamnet:

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

Hoppa över certifikatvalidering

Ställ TrustServerCertificate=true in att hoppa över all certifikatvalidering. Anslutningen är fortfarande krypterad, men serverns identitet är inte verifierad:

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

Försiktighet

Inställning TrustServerCertificate=true exponerar kopplingen till attacker från motståndaren i mitten. Använd detta alternativ endast för utveckling och testning.

TDS 8.0 strikt läge

TDS 8.0 (strikt kryptering) utför TLS-handskakningen före någon TDS-protokollförhandling. Denna metod förhindrar att en angripare nedgraderar hela anslutningen. TDS 8.0 kräver SQL Server 2022 eller Azure SQL:

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

I strikt läge ignoreras parametern TrustServerCertificate . Certifikatvalidering sker alltid, med systemförtroendet som standard. Du kan ange certificate eller serverCertificate för anpassad validering.

Lägsta TLS-version

Använd parametern tlsmin för att upprätthålla en minimal TLS-version:

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

Giltiga värden: 1.0, 1.1, 1.2, 1.3.

Sammanfattning av krypteringsparametrar

Parameter Standardinställning Description
encrypt false Krypteringsläge. Azure SQL kräver alltid kryptering på serversidan oavsett denna inställning.
TrustServerCertificate Beror på encrypt Hoppa över certifikatvalidering när true. Standarden är false när encrypt anges och true när encrypt utelämnas.
certificate - PEM/DER-filväg för kedjevalidering.
serverCertificate - PEM/DER-filsökväg för bytenivåjämförelse.
hostnameincertificate - Åsidosätt förväntat värdnamn i certifikatet.
tlsmin - Minsta TLS-version.