Dela via


Förstå krypteringsstöd

Ladda ned JDBC-drivrutin

När du ansluter till SQL Server, om programmet begär kryptering och instansen av SQL Server har konfigurerats för att stödja TLS-kryptering, initierar Microsoft JDBC-drivrutinen för SQL Server TLS-handskakningen. Handskakningen gör att servern och klienten kan förhandla om krypterings- och kryptografiska algoritmer som ska användas för att skydda data. När TLS-handskakningen är klar kan klienten och servern skicka krypterade data på ett säkert sätt. Under TLS-handskakningen skickar servern sitt offentliga nyckelcertifikat till klienten. Utfärdaren av ett offentligt nyckelcertifikat kallas certifikatutfärdare (CA). Klienten ansvarar för att verifiera att certifikatutfärdare är en som klienten litar på.

Om programmet inte begär kryptering tvingar inte Microsoft JDBC-drivrutinen för SQL Server SQL Server att stödja TLS-kryptering. Om SQL Server-instansen inte har konfigurerats för att tvinga TLS-krypteringen upprättas en anslutning utan kryptering. Om SQL Server-instansen har konfigurerats för att tvinga TLS-krypteringen aktiverar drivrutinen automatiskt TLS-kryptering när den körs på korrekt konfigurerad Java Virtual Machine (JVM), annars avslutas anslutningen och drivrutinen genererar ett fel.

Anmärkning

Kontrollera att värdet som skickas till serverName exakt matchar det gemensamma namnet (CN) eller DNS-namnet i SAN (Subject Alternate Name) i servercertifikatet för att en TLS-anslutning ska lyckas.

Mer information om hur du konfigurerar TLS för SQL Server finns i Aktivera krypterade anslutningar till databasmotorn.

Anmärkningar

För att tillåta att program använder TLS-kryptering har Microsoft JDBC-drivrutinen för SQL Server introducerat följande anslutningsegenskaper som börjar med version 1.2-versionen: encrypt, trustServerCertificate, trustStore, trustStorePassword och hostNameInCertificate. För att tillåta drivrutinen att använda TDS 8.0 med TLS-kryptering har anslutningsegenskapen serverCertificate introducerats från och med version 11.2. Mer information finns i Ange anslutningsegenskaperna.

I följande tabell sammanfattas hur Microsoft JDBC-drivrutinen för SQL Server-versionen fungerar för möjliga TLS-anslutningsscenarier. Varje scenario använder en annan uppsättning TLS-anslutningsegenskaper. Tabellen innehåller:

  • blank: "Egenskapen finns inte i anslutningssträngen"
  • värde: "Egenskapen finns i anslutningssträngen och dess värde är giltigt"
  • any: "Det spelar ingen roll om egenskapen finns i anslutningssträngen eller om dess värde är giltigt"

Anmärkning

Samma beteende gäller för SQL Server-användarautentisering och Windows-integrerad autentisering.

Egenskapsinställningar Beteende
encrypt = false eller tom
trustServerCertificate = valfri
hostNameInCertificate = någon
trustStore = any
trustStorePassword = any
Drivrutinen tvingar inte servern att stödja TLS-kryptering. Om servern har ett självsignerat certifikat initierar drivrutinen TLS-certifikatutbytet. TLS-certifikatet verifieras inte och endast autentiseringsuppgifterna (i inloggningspaketet) krypteras.

Om servern kräver att klienten stöder TLS-kryptering initierar drivrutinen TLS-certifikatutbytet. TLS-certifikatet verifieras inte, men hela kommunikationen krypteras.
encrypt = true
trustServerCertificate = true
hostNameInCertificate = any
trustStore = valfri
trustStorePassword = any
Drivrutinen begär att använda TLS-kryptering med servern.

Om servern kräver att klienten stöder TLS-kryptering eller om servern stöder kryptering initierar drivrutinen TLS-certifikatutbytet. Om egenskapen trustServerCertificate är inställd på "true" validerar drivrutinen inte TLS-certifikatet.

Om servern inte har konfigurerats för att stödja kryptering skapar drivrutinen ett fel och avslutar anslutningen.
encrypt = true
trustServerCertificate = falskt eller tomt
hostNameInCertificate = tom
trustStore = tom
trustStorePassword = tom
Drivrutinen begär att använda TLS-kryptering med servern.

Om servern kräver att klienten stöder TLS-kryptering eller om servern stöder kryptering initierar drivrutinen TLS-certifikatutbytet.

Drivrutinen använder egenskapen serverName som anges på anslutnings-URL:en för att verifiera serverns TLS-certifikat och förlitar sig på säkerhetshanterarens fabriks uppslagsregler för att avgöra vilket certifikatarkiv som ska användas.

Om servern inte har konfigurerats för att stödja kryptering skapar drivrutinen ett fel och avslutar anslutningen.
encrypt = true
trustServerCertificate = falskt eller tomt
hostNameInCertificate = värde
trustStore = tom
trustStorePassword = tom
Drivrutinen begär att använda TLS-kryptering med servern.

Om servern kräver att klienten stöder TLS-kryptering eller om servern stöder kryptering initierar drivrutinen TLS-certifikatutbytet.

Drivrutinen validerar TLS-certifikatets ämnesvärde med hjälp av det värde som angetts för egenskapen hostNameInCertificate .

Om servern inte har konfigurerats för att stödja kryptering skapar drivrutinen ett fel och avslutar anslutningen.
encrypt = true
trustServerCertificate = falskt eller tomt
hostNameInCertificate = tom
trustStore = värde
trustStorePassword = värde
Drivrutinen begär att använda TLS-kryptering med servern.

Om servern kräver att klienten stöder TLS-kryptering eller om servern stöder kryptering initierar drivrutinen TLS-certifikatutbytet.

Drivrutinen använder egenskapsvärdet trustStore för att hitta certifikatets trustStore-fil och egenskapsvärdet trustStorePassword för att kontrollera integriteten för trustStore-filen.

Om servern inte har konfigurerats för att stödja kryptering skapar drivrutinen ett fel och avslutar anslutningen.
encrypt = true
trustServerCertificate = falskt eller tomt
hostNameInCertificate = tom
trustStore = tom
trustStorePassword = värde
Drivrutinen begär att använda TLS-kryptering med servern.

Om servern kräver att klienten stöder TLS-kryptering eller om servern stöder kryptering initierar drivrutinen TLS-certifikatutbytet.

Drivrutinen använder egenskapsvärdet trustStorePassword för att kontrollera integriteten för standardfilen trustStore.

Om servern inte har konfigurerats för att stödja kryptering skapar drivrutinen ett fel och avslutar anslutningen.
encrypt = true
trustServerCertificate = falskt eller tomt
hostNameInCertificate = tom
trustStore = värde
trustStorePassword = lämnas tomt
Drivrutinen begär att använda TLS-kryptering med servern.

Om servern kräver att klienten stöder TLS-kryptering eller om servern stöder kryptering initierar drivrutinen TLS-certifikatutbytet.

Drivrutinen använder egenskapsvärdet trustStore för att leta upp platsen för trustStore-filen.

Om servern inte har konfigurerats för att stödja kryptering skapar drivrutinen ett fel och avslutar anslutningen.
encrypt = true
trustServerCertificate = falskt eller tomt
hostNameInCertificate = värde
trustStore = tom
trustStorePassword = värde
Drivrutinen begär att använda TLS-kryptering med servern.

Om servern kräver att klienten stöder TLS-kryptering eller om servern stöder kryptering initierar drivrutinen TLS-certifikatutbytet.

Drivrutinen använder egenskapsvärdet trustStorePassword för att kontrollera integriteten för standardfilen trustStore. Drivrutinen använder dessutom egenskapsvärdet hostNameInCertificate för att verifiera TLS-certifikatet.

Om servern inte har konfigurerats för att stödja kryptering skapar drivrutinen ett fel och avslutar anslutningen.
encrypt = true
trustServerCertificate = falskt eller tomt
hostNameInCertificate = värde
trustStore = värde
trustStorePassword = tom
Drivrutinen begär att använda TLS-kryptering med servern.

Om servern kräver att klienten stöder TLS-kryptering eller om servern stöder kryptering initierar drivrutinen TLS-certifikatutbytet.

Drivrutinen använder egenskapsvärdet trustStore för att leta upp platsen för trustStore-filen. Drivrutinen använder dessutom egenskapsvärdet hostNameInCertificate för att verifiera TLS-certifikatet.

Om servern inte har konfigurerats för att stödja kryptering skapar drivrutinen ett fel och avslutar anslutningen.
encrypt = true
trustServerCertificate = falskt eller tomt
hostNameInCertificate = värde
trustStore = värde
trustStorePassword = värde
Drivrutinen begär att använda TLS-kryptering med servern.

Om servern kräver att klienten stöder TLS-kryptering eller om servern stöder kryptering initierar drivrutinen TLS-certifikatutbytet.

Drivrutinen använder egenskapsvärdet trustStore för att hitta certifikatets trustStore-fil och egenskapsvärdet trustStorePassword för att kontrollera integriteten för trustStore-filen. Drivrutinen använder dessutom egenskapsvärdet hostNameInCertificate för att verifiera TLS-certifikatet.

Om servern inte har konfigurerats för att stödja kryptering skapar drivrutinen ett fel och avslutar anslutningen.
encrypt = strict
hostNameInCertificate = värde
trustStore = tom
trustStorePassword = tom
serverCertificate = värde
Drivrutinen begär att använda TDS 8.0 strict TLS-kryptering med servern.

Drivrutinen initierar TLS-handskakningen och certifikatutbytet med servern som den första åtgärden.

Inställningen trustServerCertificate ignoreras och behandlas som false i strict läge.

Drivrutinen använder de valfria egenskaperna hostNameInCertificate eller serverCertificate för att verifiera serverns TLS-certifikat.

Om servern inte har konfigurerats för att stödja TDS 8.0-anslutningar uppstår ett fel i drivrutinen och anslutningen avslutas.

Om krypteringsegenskapen är inställd på true använder Microsoft JDBC-drivrutinen för SQL Server JVM:s standard-JSSE-säkerhetsprovider för att förhandla om TLS-kryptering med SQL Server. Standardsäkerhetsprovidern kanske inte stöder alla funktioner som krävs för att förhandla om TLS-kryptering. Standardsäkerhetsprovidern kanske till exempel inte stöder storleken på den offentliga RSA-nyckel som används i SQL Server TLS-certifikatet. I det här fallet kan standardsäkerhetsprovidern generera ett fel som gör att JDBC-drivrutinen avslutar anslutningen. Ett av följande alternativ kan användas för att lösa problemet:

  • Konfigurera SQL Server med ett servercertifikat som har en mindre offentlig RSA-nyckel
  • Konfigurera JVM för att använda en annan JSSE-säkerhetsleverantör i säkerhetsegenskapsfilen "<java-home>/lib/security/java.security"
  • Använda en annan JVM

Verifiera serverns TLS-certifikat

Under TLS-handskakningen skickar servern sitt offentliga nyckelcertifikat till klienten. JDBC-drivrutinen eller -klienten måste verifiera att servercertifikatet utfärdas av en certifikatutfärdare som klienten litar på. Drivrutinen kräver att servercertifikatet uppfyller följande villkor:

  • Certifikatet utfärdades av en betrodd certifikatutfärdare.
  • Certifikatet måste utfärdas för serverautentisering.
  • Certifikatet har inte upphört att gälla.
  • Det gemensamma namnet (CN) i ämnesraden eller ett DNS-namn i certifikatets alternativa ämnesnamn (SAN) för certifikatet matchar exakt det serverName-värde som anges i anslutningssträngen eller, om det anges, egenskapsvärdet hostNameInCertificate .
  • Ett DNS-namn kan innehålla jokertecken. Tidigare version 7.2 har Microsoft JDBC-drivrutinen för SQL Server inte stöd för wild card-matchning. Det vill säga abc.com matchar inte *.com men *.com matchar *.com. Standardmatchning av jokertecken för certifikat stöds från och med version 7.2 och senare.

För användning av TDS 8.0 med strict kryptering tillhandahåller egenskapsvärdet serverCertificate sökvägen till ett servercertifikat som ska användas för verifiering av servercertifikat. Den här filen måste använda PEM-filformatet. Certifikatet som tas emot från servern måste matcha det här certifikatet exakt.

Se även

Att använda kryptering
Skydda JDBC-drivrutinsprogram