Principy podpory šifrování

Stáhnout ovladač JDBC

Při připojování k SQL Serveru, pokud aplikace požaduje šifrování a instance SQL Serveru je nakonfigurovaná tak, aby podporovala šifrování TLS, ovladač Microsoft JDBC pro SQL Server zahájí metodu handshake protokolu TLS. Metoda handshake umožňuje serveru a klientovi vyjednat šifrování a kryptografické algoritmy k ochraně dat. Po dokončení metody handshake protokolu TLS může klient a server bezpečně odesílat šifrovaná data. Během metody handshake protokolu TLS server odešle klientovi certifikát veřejného klíče. Vystavitel certifikátu veřejného klíče se označuje jako certifikační autorita (CA). Klient odpovídá za ověření, že certifikační autorita patří mezi ty, kterým důvěřuje.

Pokud aplikace nepožaduje šifrování, ovladač Microsoft JDBC pro SQL Server nebude vynutit, aby SQL Server podporoval šifrování TLS. Pokud není instance SQL Serveru nakonfigurovaná tak, aby vynutila šifrování TLS, vytvoří se připojení bez šifrování. Pokud je instance SQL Serveru nakonfigurovaná tak, aby vynutila šifrování TLS, ovladač automaticky povolí šifrování TLS při spuštění na správně nakonfigurovaném virtuálním počítači Java (JVM) nebo jinak se připojení ukončí a ovladač vyvolá chybu.

Poznámka:

Ujistěte se, že hodnota předaná názvu serveru přesně odpovídá názvu běžného názvu (CN) nebo názvu DNS v alternativním názvu subjektu (SAN) v certifikátu serveru, aby bylo připojení TLS úspěšné.

Další informace o konfiguraci protokolu TLS pro SQL Server naleznete v tématu Povolení šifrovaných připojení k databázovému stroji.

Poznámky

Aby mohly aplikace používat šifrování TLS, ovladač Microsoft JDBC pro SQL Server zavedl následující vlastnosti připojení počínaje verzí 1.2: encrypt, trustServerCertificate, trustStore, trustStorePassword a hostNameInCertificate. Aby mohl ovladač používat TDS 8.0 se šifrováním TLS, byla počínaje verzí 11.2 zavedena vlastnost připojení serverCertificate. Další informace naleznete v tématu Nastavení vlastností připojení.

Následující tabulka shrnuje, jak se ovladač Microsoft JDBC pro verzi SQL Serveru chová pro možné scénáře připojení TLS. Každý scénář používá jinou sadu vlastností připojení TLS. Tabulka obsahuje:

  • blank: Vlastnost v připojovacím řetězci neexistuje.
  • value: "Vlastnost existuje v připojovacím řetězci a její hodnota je platná"
  • any: "Nezáleží na tom, zda vlastnost existuje v připojovacím řetězci nebo její hodnota je platná"

Poznámka:

Stejné chování platí pro ověřování uživatelů SQL Serveru a integrované ověřování Systému Windows.

Nastavení vlastností Chování
encrypt = false nebo prázdné
trustServerCertificate = libovolný
hostNameInCertificate = libovolný
trustStore = libovolný
trustStorePassword = libovolný
Ovladač nebude vynucovat, aby server podporoval šifrování TLS. Pokud má server certifikát podepsaný svým držitelem, ovladač zahájí výměnu certifikátů TLS. Certifikát TLS se neověří a zašifrují se jenom přihlašovací údaje (v přihlašovacím paketu).

Pokud server vyžaduje, aby klient podporoval šifrování TLS, ovladač zahájí výměnu certifikátů TLS. Certifikát TLS se neověří, ale veškerá komunikace se zašifruje.
encrypt = true
trustServerCertificate = true
hostNameInCertificate = libovolný
trustStore = libovolný
trustStorePassword = libovolný
Ovladač požaduje použití šifrování TLS při komunikaci se serverem.

Pokud server vyžaduje, aby klient podporoval šifrování TLS nebo pokud server podporuje šifrování, ovladač zahájí výměnu certifikátů TLS. Pokud je vlastnost trustServerCertificate nastavená na true, ovladač neověří certifikát TLS.

Pokud server není nakonfigurovaný tak, aby podporoval šifrování, ovladač vyvolá chybu a ukončí připojení.
encrypt = true
trustServerCertificate = false nebo prázdné
hostNameInCertificate = prázdné
trustStore = prázdné
trustStorePassword = prázdné
Ovladač požaduje použití šifrování TLS při komunikaci se serverem.

Pokud server vyžaduje, aby klient podporoval šifrování TLS nebo pokud server podporuje šifrování, ovladač zahájí výměnu certifikátů TLS.

Ovladač použije vlastnost serverName zadanou na adrese URL připojení k ověření certifikátu TLS serveru a spoléhá na vyhledávací pravidla objektu správce důvěryhodnosti k určení úložiště certifikátů, které se má použít.

Pokud server není nakonfigurovaný tak, aby podporoval šifrování, ovladač vyvolá chybu a ukončí připojení.
encrypt = true
trustServerCertificate = false nebo prázdné
hostNameInCertificate = hodnota
trustStore = prázdné
trustStorePassword = prázdné
Ovladač požaduje použití šifrování TLS se serverem.

Pokud server vyžaduje, aby klient podporoval šifrování TLS nebo pokud server podporuje šifrování, ovladač zahájí výměnu certifikátů TLS.

Ovladač ověří hodnotu subjektu certifikátu TLS pomocí hodnoty zadané pro vlastnost hostNameInCertificate .

Pokud server není nakonfigurovaný tak, aby podporoval šifrování, ovladač vyvolá chybu a ukončí připojení.
encrypt = true
trustServerCertificate = false nebo prázdné
hostNameInCertificate = prázdné
trustStore = hodnota
trustStorePassword = hodnota
Ovladač požaduje použití šifrování TLS u serveru.

Pokud server vyžaduje, aby klient podporoval šifrování TLS nebo pokud server podporuje šifrování, ovladač zahájí výměnu certifikátů TLS.

Ovladač použije hodnotu vlastnosti trustStore k vyhledání souboru trustStore a hodnoty vlastnosti trustStorePassword pro kontrolu integrity souboru trustStore.

Pokud server není nakonfigurovaný tak, aby podporoval šifrování, ovladač vyvolá chybu a ukončí připojení.
encrypt = true
trustServerCertificate = false nebo prázdné
hostNameInCertificate = prázdné
trustStore = prázdné
trustStorePassword = hodnota
Ovladač vyžaduje použití šifrování TLS se serverem.

Pokud server vyžaduje, aby klient podporoval šifrování TLS nebo pokud server podporuje šifrování, ovladač zahájí výměnu certifikátů TLS.

Ovladač použije hodnotu vlastnosti trustStorePassword ke kontrole integrity výchozího souboru trustStore.

Pokud server není nakonfigurovaný tak, aby podporoval šifrování, ovladač vyvolá chybu a ukončí připojení.
encrypt = true
trustServerCertificate = false nebo prázdné
hostNameInCertificate = prázdné
trustStore = hodnota
trustStorePassword = prázdné
Ovladač požaduje použití šifrování TLS se serverem.

Pokud server vyžaduje, aby klient podporoval šifrování TLS nebo pokud server podporuje šifrování, ovladač zahájí výměnu certifikátů TLS.

Ovladač použije hodnotu vlastnosti trustStore k vyhledání umístění souboru trustStore.

Pokud server není nakonfigurovaný tak, aby podporoval šifrování, ovladač vyvolá chybu a ukončí připojení.
encrypt = true
trustServerCertificate = false nebo prázdné
hostNameInCertificate = hodnota
trustStore = prázdné
trustStorePassword = hodnota
Ovladač požaduje použití šifrování TLS při komunikaci se serverem.

Pokud server vyžaduje, aby klient podporoval šifrování TLS nebo pokud server podporuje šifrování, ovladač zahájí výměnu certifikátů TLS.

Ovladač použije hodnotu vlastnosti trustStorePassword ke kontrole integrity výchozího souboru trustStore. Ovladač také použije hodnotu vlastnosti hostNameInCertificate k ověření certifikátu TLS.

Pokud server není nakonfigurovaný tak, aby podporoval šifrování, ovladač vyvolá chybu a ukončí připojení.
encrypt = true
trustServerCertificate = false nebo prázdné
hostNameInCertificate = hodnota
trustStore = hodnota
trustStorePassword = prázdné
Ovladač požaduje použití šifrování TLS se serverem.

Pokud server vyžaduje, aby klient podporoval šifrování TLS nebo pokud server podporuje šifrování, ovladač zahájí výměnu certifikátů TLS.

Ovladač použije hodnotu vlastnosti trustStore k vyhledání umístění souboru trustStore. Ovladač také použije hodnotu vlastnosti hostNameInCertificate k ověření certifikátu TLS.

Pokud server není nakonfigurovaný tak, aby podporoval šifrování, ovladač vyvolá chybu a ukončí připojení.
encrypt = true
trustServerCertificate = false nebo prázdné
hostNameInCertificate = hodnota
trustStore = hodnota
trustStorePassword = hodnota
Ovladač požaduje použití šifrování TLS při komunikaci se serverem.

Pokud server vyžaduje, aby klient podporoval šifrování TLS nebo pokud server podporuje šifrování, ovladač zahájí výměnu certifikátů TLS.

Ovladač použije hodnotu vlastnosti trustStore k vyhledání souboru trustStore a hodnoty vlastnosti trustStorePassword pro kontrolu integrity souboru trustStore. Ovladač také použije hodnotu vlastnosti hostNameInCertificate k ověření certifikátu TLS.

Pokud server není nakonfigurovaný tak, aby podporoval šifrování, ovladač vyvolá chybu a ukončí připojení.
encrypt = přísný
hostNameInCertificate = hodnota
trustStore = prázdné
trustStorePassword = prázdné
serverCertificate = hodnota
Ovladač požaduje použití šifrování TLS TDS 8.0 strict se serverem.

Ovladač jako první krok zahájí handshake protokolu TLS a výměnu certifikátů se serverem.

Nastavení trustServerCertificate se ignoruje a považuje se za false v strict režimu.

Ovladač použije volitelné vlastnosti hostNameInCertificate nebo serverCertificate k ověření certifikátu TLS serveru.

Pokud server není nakonfigurovaný tak, aby podporoval připojení TDS 8.0, ovladač vyvolá chybu a ukončí připojení.

Pokud je vlastnost encrypt nastavena na true, ovladač Microsoft JDBC pro SQL Server používá výchozího poskytovatele zabezpečení JSSE v JVM k vyjednání šifrování TLS se serverem SQL Server. Výchozí zprostředkovatel zabezpečení nemusí podporovat všechny funkce potřebné k úspěšnému vyjednání šifrování TLS. Výchozí zprostředkovatel zabezpečení například nemusí podporovat velikost veřejného klíče RSA použitého v certifikátu TLS SQL Serveru. V tomto případě může výchozí poskytovatel zabezpečení vyvolat chybu, která způsobí ukončení připojení ovladače JDBC. Pokud chcete tento problém vyřešit, můžete použít jednu z následujících možností:

  • Konfigurace SQL Serveru s certifikátem serveru, který má menší veřejný klíč RSA
  • Nakonfigurujte prostředí JVM tak, aby používalo jiného zprostředkovatele zabezpečení JSSE v< souboru vlastností zabezpečení java-home>/lib/security/java.security.
  • Použití jiného prostředí JVM

Ověřování certifikátu TLS serveru

Během metody handshake protokolu TLS server odešle klientovi certifikát veřejného klíče. Ovladač JDBC nebo klient musí ověřit, že certifikát serveru vydává certifikační autorita, které klient důvěřuje. Ovladač vyžaduje, aby certifikát serveru splňoval následující podmínky:

  • Certifikát vydal důvěryhodná certifikační autorita.
  • Certifikát musí být vystaven pro ověření serveru.
  • Platnost certifikátu nevypršela.
  • Běžný název (CN) v poli Subject nebo název DNS v poli Subject Alternative Name (SAN) certifikátu přesně odpovídá hodnotě serverName zadané v připojovacím řetězci nebo, pokud je zadána, hodnotě vlastnosti hostNameInCertificate.
  • Název DNS může obsahovat zástupné znaky. Před verzí 7.2 ovladač Microsoft JDBC pro SQL Server nepodporuje porovnávání pomocí zástupných znaků. To znamená, že abc.com se nebude shodovat s *.com, ale *.com se bude shodovat s *.com. Od verze 7.2 je podporováno standardní porovnávání certifikátů pomocí zástupných znaků.

Pro použití TDS 8.0 s šifrováním strict poskytuje hodnota vlastnosti serverCertificate cestu k certifikátu serveru, který se má použít pro ověření certifikátu serveru. Tento soubor musí používat formát souboru PEM. Certifikát přijatý ze serveru musí přesně odpovídat tomuto certifikátu.