Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.