Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Treiber go-mssqldb unterstützt mehrere Verschlüsselungsmodi und Zertifikatsvalidierungsstrategien für Verbindungen zu SQL Server und Azure SQL. Dieser Artikel erklärt jeden Verschlüsselungsmodus, wie die Zertifikatsvalidierung konfiguriert wird und wann der TDS-8.0-Strengmodus verwendet werden sollte.
Wählen Sie eine TLS-Konfiguration
Verwenden Sie diese Tabelle, um die sicherste Option auszuwählen, die zu Ihrer Umgebung passt, bevor Sie einzelne Parameter anpassen.
| Szenario | Empfohlene Einstellungen | Warum? |
|---|---|---|
| Azure SQL oder SQL Server 2022 und neuere Versionen, und du möchtest den stärksten Standardschutz | encrypt=strict |
TDS 8.0 führt den TLS-Handshake vor der TDS-Verhandlung durch und validiert das Zertifikat immer. |
| Das Serverzertifikat führt zu einer vertrauenswürdigen öffentlichen oder unternehmensinternen CA | encrypt=true |
Die Standard-Zertifikatsvalidierung reicht in der Regel aus, wenn der Hostname und die Vertrauenskette bereits korrekt sind. |
| Der Server verwendet eine private CA, die nicht im System-Vertrauensspeicher ist | encrypt=true&certificate=/path/to/ca-cert.pem |
Fügt das CA-Zertifikat einem benutzerdefinierten Trust Pool hinzu und behält die normale Kettenvalidierung bei. |
| Der Server verwendet ein selbstsigniertes Zertifikat und du möchtest ein Zertifikats-Pinning | encrypt=true&serverCertificate=/path/to/server.pem |
Vergleicht das exakte Serverzertifikat Byte für Byte, anstatt sich auf eine CA-Kette zu verlassen. |
| Nur lokale Entwicklungs- oder temporäre Testumgebungen | encrypt=true&TrustServerCertificate=true |
Bleibt die Verschlüsselung aktiviert, überspringt aber die Validierung der Serveridentität. Verwende diese Einstellung nicht in der Produktion. |
Verschlüsselungsmodi
Setze den encrypt Verbindungsparameter auf einen der folgenden Werte:
| Wert | Behavior |
|---|---|
strict |
TDS 8.0-Verschlüsselung. Der TLS-Handschlag findet vor der TDS-Verbindungsverhandlung statt. Benötigt SQL Server 2022 oder Azure SQL. |
true oder mandatory |
Die Verbindung wird nach dem TDS-Prelogin-Handshake verschlüsselt. |
false oder optional |
Verschlüsselung wird nur verwendet, wenn der Server sie verlangt. Dies ist die Standardeinstellung, wenn encrypt nicht angegeben ist. Azure SQL erfordert immer Server-seitige Verschlüsselung, daher werden Verbindungen zu Azure SQL unabhängig von dieser Einstellung verschlüsselt. |
disable |
Keine Verschlüsselung. Nicht für die Produktion empfohlen. |
Example
Aktivieren Sie die Verschlüsselung in der Verbindungszeichenfolge mit dem folgenden encrypt Parameter:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true
Zertifikatüberprüfung
Wenn Sie die Verschlüsselung aktivieren (encrypt=true oder encrypt=strict), validiert der Treiber das Serverzertifikat, es sei denn, Sie setzen TrustServerCertificate=true. Für diese Validierung existieren zwei unabhängige Ansätze.
Kettenvalidierung mittels Verwendung des Parameters certificate
Stellen Sie eine PEM- oder DER-Zertifikatsdatei bereit. Der Treiber fügt das Zertifikat einem benutzerdefinierten Vertrauenspool hinzu und führt eine standardmäßige X.509-Kettenvalidierung gegen diesen Pool durch:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&certificate=/path/to/ca-cert.pem
Byte-Level-Vergleich mit dem Parameter serverCertificate
Note
Der Parameter serverCertificate wurde in Treiberversion 1.9.6 eingeführt.
Stellen Sie eine PEM- oder DER-Datei bereit, die das genaue Serverzertifikat enthält. Der Treiber vergleicht das Zertifikat des Servers Byte für Byte mit der bereitgestellten Datei. Der Treiber führt keine Kettenvalidierung durch. Dieser Ansatz ist nützlich für selbstsignierte Zertifikate:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&serverCertificate=/path/to/server.pem
Hostnamen außer Kraft setzen
Standardmäßig überprüft der Treiber, ob der Common Name (CN) oder Subject Alternative Name (SAN) des Zertifikats mit dem Server-Hostnamen übereinstimmt. Verwenden Sie hostnameincertificate , um den erwarteten Hostnamen zu überschreiben:
sqlserver://<user>:<password>@10.0.0.5:1433?database=AdventureWorks2025&encrypt=true&hostnameincertificate=<server>.domain.com
Zertifikatsvalidierung überspringen
Setze es TrustServerCertificate=true so, dass alle Zertifikatsvalidierungen übersprungen werden. Die Verbindung ist weiterhin verschlüsselt, aber die Serveridentität ist nicht verifiziert:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&TrustServerCertificate=true
Achtung
Die Einstellung TrustServerCertificate=true macht die Verbindung anfällig für Adversary-in-the-Middle-Angriffe. Nutze diese Option nur für Entwicklung und Test.
TDS 8.0 Strikter Modus
TDS 8.0 (strenge Verschlüsselung) führt den TLS-Handshake vor jeder TDS-Protokollverhandlung durch. Dieser Ansatz verhindert, dass ein Angreifer die gesamte Verbindung herunterstufen. TDS 8.0 benötigt SQL Server 2022 oder Azure SQL:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=strict
Im strengen Modus wird der Parameter TrustServerCertificate ignoriert. Die Zertifikatsvalidierung erfolgt immer standardmäßig unter Verwendung des System-Vertrauensspeichers. Sie können certificate oder serverCertificate für eine benutzerdefinierte Validierung angeben.
TLS-Mindestversion
Verwenden Sie den Parameter, tlsmin um eine minimale TLS-Version zu erzwingen:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&tlsmin=1.2
Gültige Werte: 1.0, 1.1, 1.2, . 1.3
Zusammenfassung der Verschlüsselungsparameter
| Parameter | Standard | Beschreibung |
|---|---|---|
encrypt |
false |
Verschlüsselungsmodus. Azure SQL benötigt immer Server-seitige Verschlüsselung, unabhängig von dieser Einstellung. |
TrustServerCertificate |
Ist abhängig von encrypt |
Überspringe die Zertifikatsvalidierung, wenn true. Der Standardwert ist false, wenn encrypt angegeben ist, und true, wenn encrypt weggelassen wird. |
certificate |
- | PEM/DER-Dateipfad für Kettenvalidierung. |
serverCertificate |
- | PEM/DER-Dateipfad für den Byte-Level-Vergleich. |
hostnameincertificate |
- | Den im Zertifikat erwarteten Hostnamen ignorieren. |
tlsmin |
- | Minimale TLS-Version. |