Delen via


Begrijpen van versleutelingsondersteuning

JDBC-stuurprogramma downloaden

Wanneer u verbinding maakt met SQL Server en de toepassing versleuteling aanvraagt en het exemplaar van SQL Server is geconfigureerd ter ondersteuning van TLS-versleuteling, start het Microsoft JDBC-stuurprogramma voor SQL Server de TLS-handshake. Met de handshake kunnen de server en client onderhandelen over de versleutelings- en cryptografische algoritmen die moeten worden gebruikt om gegevens te beveiligen. Nadat de TLS-handshake is voltooid, kunnen de client en server de versleutelde gegevens veilig verzenden. Tijdens de TLS-handshake verzendt de server het openbare-sleutelcertificaat naar de client. De verlener van een openbare-sleutelcertificaat wordt een certificeringsinstantie (CA) genoemd. De client is verantwoordelijk voor het valideren dat de certificeringsinstantie een vertrouwensrelatie is van de client.

Als de toepassing geen versleuteling aanvraagt, dwingt het Microsoft JDBC-stuurprogramma voor SQL Server SQL Server niet af om TLS-versleuteling te ondersteunen. Als het SQL Server-exemplaar niet is geconfigureerd om de TLS-versleuteling af te dwingen, wordt er een verbinding tot stand gebracht zonder versleuteling. Als het SQL Server-exemplaar is geconfigureerd om de TLS-versleuteling af te dwingen, schakelt het stuurprogramma automatisch TLS-versleuteling in wanneer deze wordt uitgevoerd op correct geconfigureerde Java Virtual Machine (JVM), anders wordt de verbinding beëindigd en treedt er een fout op.

Opmerking

Zorg ervoor dat de waarde die aan serverName is doorgegeven, exact overeenkomt met de algemene naam (CN) of DNS-naam in de alternatieve onderwerpnaam (SAN) in het servercertificaat, zodat een TLS-verbinding is geslaagd.

Zie Versleutelde verbindingen met de database-engine inschakelen voor meer informatie over het configureren van TLS voor SQL Server.

Opmerkingen

Om toepassingen toe te staan TLS-versleuteling te gebruiken, heeft het Microsoft JDBC-stuurprogramma voor SQL Server de volgende verbindingseigenschappen geïntroduceerd vanaf de release van versie 1.2: encrypt, trustServerCertificate, trustStore, trustStorePassword en hostNameInCertificate. Om het stuurprogramma toe te staan TDS 8.0 te gebruiken met TLS-versleuteling, is de verbindingseigenschap serverCertificate geïntroduceerd vanaf de release van versie 11.2. Zie De verbindingseigenschappen instellenvoor meer informatie.

De volgende tabel bevat een overzicht van hoe het Microsoft JDBC-stuurprogramma voor sql Server-versie zich gedraagt voor mogelijke TLS-verbindingsscenario's. In elk scenario wordt een andere set TLS-verbindingseigenschappen gebruikt. De tabel bevat:

  • leeg: 'De eigenschap bestaat niet in de verbindingsreeks'
  • waarde: "De eigenschap bestaat in de verbindingsreeks en de waarde is geldig"
  • any: "Het maakt niet uit of de eigenschap bestaat in de verbindingsreeks of de waarde is geldig"

Opmerking

Hetzelfde gedrag geldt voor SQL Server-gebruikersverificatie en geïntegreerde Windows-verificatie.

Eigenschapsinstellingen Gedrag
encrypt = false or blank
trustServerCertificate = any
hostNameInCertificate = any
trustStore = any
trustStorePassword = any
Het stuurprogramma dwingt de server niet af om TLS-versleuteling te ondersteunen. Als de server een zelfondertekend certificaat heeft, start het stuurprogramma de UITWISSELING van TLS-certificaten. Het TLS-certificaat wordt niet gevalideerd en alleen de referenties (in het aanmeldingspakket) worden versleuteld.

Als de server vereist dat de client TLS-versleuteling ondersteunt, wordt de TLS-certificaatuitwisseling gestart door het stuurprogramma. Het TLS-certificaat wordt niet gevalideerd, maar de volledige communicatie wordt versleuteld.
encrypt = true
trustServerCertificate = true
hostNameInCertificate = any
trustStore = any
trustStorePassword = any
Het stuurprogramma vraagt om TLS-versleuteling met de server te gebruiken.

Als de server vereist dat de client TLS-versleuteling ondersteunt of als de server versleuteling ondersteunt, start het stuurprogramma de uitwisseling van TLS-certificaten. Als de eigenschap trustServerCertificate is ingesteld op 'true', valideert het stuurprogramma het TLS-certificaat niet.

Als de server niet is geconfigureerd om versleuteling te ondersteunen, treedt er een fout op en wordt de verbinding beëindigd.
encrypt = true
trustServerCertificate = false of blank
hostNameInCertificate = leeg
trustStore = leeg
trustStorePassword = leeg
Het stuurprogramma vraagt om TLS-versleuteling met de server te gebruiken.

Als de server vereist dat de client TLS-versleuteling ondersteunt of als de server versleuteling ondersteunt, start het stuurprogramma de uitwisseling van TLS-certificaten.

Het stuurprogramma gebruikt de eigenschap ServerName die is opgegeven op de verbindings-URL om het TLS-servercertificaat te valideren en te vertrouwen op de opzoekregels van de vertrouwensmanagerfactory om te bepalen welk certificaatarchief moet worden gebruikt.

Als de server niet is geconfigureerd om versleuteling te ondersteunen, treedt er een fout op en wordt de verbinding beëindigd.
encrypt = true
trustServerCertificate = false of blank
hostNameInCertificate = waarde
trustStore = leeg
trustStorePassword = leeg
Het stuurprogramma vraagt om TLS-versleuteling met de server te gebruiken.

Als de server vereist dat de client TLS-versleuteling ondersteunt of als de server versleuteling ondersteunt, start het stuurprogramma de uitwisseling van TLS-certificaten.

Het stuurprogramma valideert de onderwerpwaarde van het TLS-certificaat met behulp van de waarde die is opgegeven voor de eigenschap hostNameInCertificate .

Als de server niet is geconfigureerd om versleuteling te ondersteunen, treedt er een fout op en wordt de verbinding beëindigd.
encrypt = true
trustServerCertificate = false of blank
hostNameInCertificate = leeg
trustStore = waarde
trustStorePassword = value
Het stuurprogramma vraagt om TLS-versleuteling met de server te gebruiken.

Als de server vereist dat de client TLS-versleuteling ondersteunt of als de server versleuteling ondersteunt, start het stuurprogramma de uitwisseling van TLS-certificaten.

Het stuurprogramma gebruikt de waarde van de trustStore-eigenschap om het certificaatvertrouwensarchiefbestand en de waarde van de trustStorePassword-eigenschap te vinden om de integriteit van het trustStore-bestand te controleren.

Als de server niet is geconfigureerd om versleuteling te ondersteunen, treedt er een fout op en wordt de verbinding beëindigd.
encrypt = true
trustServerCertificate = false of blank
hostNameInCertificate = leeg
trustStore = leeg
trustStorePassword = value
Het stuurprogramma vraagt om TLS-versleuteling met de server te gebruiken.

Als de server vereist dat de client TLS-versleuteling ondersteunt of als de server versleuteling ondersteunt, start het stuurprogramma de uitwisseling van TLS-certificaten.

Het stuurprogramma gebruikt de eigenschapswaarde trustStorePassword om de integriteit van het standaard trustStore-bestand te controleren.

Als de server niet is geconfigureerd om versleuteling te ondersteunen, treedt er een fout op en wordt de verbinding beëindigd.
encrypt = true
trustServerCertificate = false of blank
hostNameInCertificate = leeg
trustStore = waarde
trustStorePassword = leeg
Het stuurprogramma vraagt om TLS-versleuteling met de server te gebruiken.

Als de server vereist dat de client TLS-versleuteling ondersteunt of als de server versleuteling ondersteunt, start het stuurprogramma de uitwisseling van TLS-certificaten.

Het stuurprogramma gebruikt de eigenschapswaarde trustStore om de locatie van het trustStore-bestand op te zoeken.

Als de server niet is geconfigureerd om versleuteling te ondersteunen, treedt er een fout op en wordt de verbinding beëindigd.
encrypt = true
trustServerCertificate = false of blank
hostNameInCertificate = waarde
trustStore = leeg
trustStorePassword = value
Het stuurprogramma vraagt om TLS-versleuteling met de server te gebruiken.

Als de server vereist dat de client TLS-versleuteling ondersteunt of als de server versleuteling ondersteunt, start het stuurprogramma de uitwisseling van TLS-certificaten.

Het stuurprogramma gebruikt de eigenschapswaarde trustStorePassword om de integriteit van het standaard trustStore-bestand te controleren. Het stuurprogramma gebruikt ook de eigenschapswaarde hostNameInCertificate om het TLS-certificaat te valideren.

Als de server niet is geconfigureerd om versleuteling te ondersteunen, treedt er een fout op en wordt de verbinding beëindigd.
encrypt = true
trustServerCertificate = false of blank
hostNameInCertificate = waarde
trustStore = waarde
trustStorePassword = leeg
Het stuurprogramma vraagt om TLS-versleuteling met de server te gebruiken.

Als de server vereist dat de client TLS-versleuteling ondersteunt of als de server versleuteling ondersteunt, start het stuurprogramma de uitwisseling van TLS-certificaten.

Het stuurprogramma gebruikt de eigenschapswaarde trustStore om de locatie van het trustStore-bestand op te zoeken. Het stuurprogramma gebruikt ook de eigenschapswaarde hostNameInCertificate om het TLS-certificaat te valideren.

Als de server niet is geconfigureerd om versleuteling te ondersteunen, treedt er een fout op en wordt de verbinding beëindigd.
encrypt = true
trustServerCertificate = false of blank
hostNameInCertificate = waarde
trustStore = waarde
trustStorePassword = value
Het stuurprogramma vraagt om TLS-versleuteling met de server te gebruiken.

Als de server vereist dat de client TLS-versleuteling ondersteunt of als de server versleuteling ondersteunt, start het stuurprogramma de uitwisseling van TLS-certificaten.

Het stuurprogramma gebruikt de waarde van de trustStore-eigenschap om het certificaatvertrouwensarchiefbestand en de waarde van de trustStorePassword-eigenschap te vinden om de integriteit van het trustStore-bestand te controleren. Het stuurprogramma gebruikt ook de eigenschapswaarde hostNameInCertificate om het TLS-certificaat te valideren.

Als de server niet is geconfigureerd om versleuteling te ondersteunen, treedt er een fout op en wordt de verbinding beëindigd.
encrypt = strict
hostNameInCertificate = waarde
trustStore = leeg
trustStorePassword = leeg
serverCertificate = waarde
Het stuurprogramma vraagt om TDS 8.0 strict TLS-versleuteling met de server te gebruiken.

Het stuurprogramma start de TLS-handshake en certificaatuitwisseling met de server als eerste actie.

De instelling trustServerCertificate wordt genegeerd en als onwaar behandeld in strict de modus.

Het stuurprogramma gebruikt de optionele eigenschappen hostNameInCertificate of serverCertificate om het TLS-servercertificaat te valideren.

Als de server niet is geconfigureerd om TDS 8.0-verbindingen te ondersteunen, treedt er een fout op en wordt de verbinding beëindigd.

Als de versleutelingseigenschap is ingesteld op waar, gebruikt het Microsoft JDBC-stuurprogramma voor SQL Server de standaard-JSSE-beveiligingsprovider van JVM om te onderhandelen over TLS-versleuteling met SQL Server. De standaardbeveiligingsprovider biedt mogelijk geen ondersteuning voor alle functies die nodig zijn om te onderhandelen over TLS-versleuteling. De standaardbeveiligingsprovider biedt bijvoorbeeld geen ondersteuning voor de grootte van de openbare RSA-sleutel die wordt gebruikt in het TLS-certificaat van SQL Server. In dit geval kan de standaardbeveiligingsprovider een fout veroorzaken waardoor het JDBC-stuurprogramma de verbinding beëindigt. U kunt dit probleem oplossen door een van de volgende opties te gebruiken:

  • De SQL Server configureren met een servercertificaat met een kleinere openbare RSA-sleutel
  • Configureer de JVM voor het gebruik van een andere JSSE-beveiligingsprovider in het eigenschappenbestand java-home<>/lib/security/java.security
  • Een andere JVM gebruiken

TLS-certificaat van server valideren

Tijdens de TLS-handshake verzendt de server het openbare-sleutelcertificaat naar de client. Het JDBC-stuurprogramma of de client moet valideren dat het servercertificaat wordt uitgegeven door een certificeringsinstantie die de client vertrouwt. Het stuurprogramma vereist dat het servercertificaat aan de volgende voorwaarden voldoet:

  • Het certificaat is uitgegeven door een vertrouwde certificeringsinstantie.
  • Het certificaat moet worden uitgegeven voor serververificatie.
  • Het certificaat is niet verlopen.
  • De algemene naam (CN) in het onderwerp of een DNS-naam in de alternatieve onderwerpnaam (SAN) van het certificaat komt exact overeen met de servernaamwaarde die is opgegeven in de verbindingsreeks of, indien opgegeven, de eigenschapswaarde hostNameInCertificate .
  • Een DNS-naam kan jokertekens bevatten. Eerdere versie 7.2 biedt het Microsoft JDBC-stuurprogramma voor SQL Server geen ondersteuning voor jokertekenkoppeling. Dat wil gezegd, abc.com komt niet overeen met *.com, maar *.com komt overeen met *.com. Met versie 7.2 en hoger wordt het standaardcertificaat voor jokertekens ondersteund.

Voor het gebruik van TDS 8.0 met strict versleuteling biedt de eigenschapswaarde serverCertificate het pad naar een servercertificaat dat moet worden gebruikt voor servercertificaatvalidatie. Dit bestand moet de PEM-bestandsindeling gebruiken. Het certificaat dat van de server is ontvangen, moet exact overeenkomen met dit certificaat.

Zie ook

Versleuteling gebruiken
JDBC-stuurprogrammatoepassingen beveiligen