Share via


Verbinding maken met versleuteling

JDBC-stuurprogramma downloaden

In de voorbeelden in dit artikel wordt beschreven hoe u eigenschappen van verbindingsreeksen gebruikt waarmee toepassingen TLS-versleuteling (Transport Layer Security) kunnen gebruiken in een Java-toepassing. Zie De verbindingseigenschappen instellen voor meer informatie over deze nieuwe eigenschappen van de verbindingsreeks, zoals encrypt, trustServerCertificate, trustStore, trustStorePassword en hostNameInCertificate.

De verbinding configureren

Wanneer de versleutelingseigenschap is ingesteld op true en de eigenschap trustServerCertificate is ingesteld op true, valideert het Microsoft JDBC-stuurprogramma voor SQL Server het TLS-certificaat van SQL Server niet. Deze instelling is gebruikelijk voor het toestaan van verbindingen in testomgevingen, zoals waarbij het SQL Server-exemplaar alleen een zelfondertekend certificaat heeft.

In het volgende codevoorbeeld ziet u hoe u de eigenschap trustServerCertificate instelt in een verbindingsreeks:

String connectionUrl =
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true;trustServerCertificate=true";

Wanneer de versleutelingseigenschap is ingesteld op true en de eigenschap trustServerCertificate is ingesteld op false, valideert het Microsoft JDBC-stuurprogramma voor SQL Server het TLS-certificaat van SQL Server. Het valideren van het servercertificaat maakt deel uit van de TLS-handshake en zorgt ervoor dat de server de juiste server is om verbinding mee te maken. Als u het servercertificaat wilt valideren, moet het vertrouwensmateriaal op het moment van de verbinding worden opgegeven door expliciet gebruik te maken van de verbindingseigenschappen trustStore en trustStorePassword, of door de standaard truststore van de onderliggende Java Virtual Machine (JVM) impliciet te gebruiken.

De eigenschap TrustStore geeft het pad (inclusief bestandsnaam) op naar het trustStore-bestand van het certificaat, dat de lijst met certificaten bevat die de client vertrouwt. De eigenschap trustStorePassword geeft het wachtwoord op dat wordt gebruikt om de integriteit van de trustStore-gegevens te controleren. Zie de Het configureren van de client voor versleuteling voor meer informatie over het gebruik van de standaard truststore van de JVM.

In het volgende codevoorbeeld ziet u hoe u de eigenschappen trustStore en trustStorePassword instelt in een verbindingsreeks:

String connectionUrl =
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true; trustServerCertificate=false;" +
     "trustStore=storeName;trustStorePassword=storePassword";

Het JDBC-stuurprogramma biedt een andere eigenschap, hostNameInCertificate, waarmee de hostnaam van de server wordt opgegeven. De waarde van deze eigenschap moet overeenkomen met de onderwerpeigenschap van het certificaat.

In het volgende codevoorbeeld ziet u hoe u de eigenschap hostNameInCertificate gebruikt in een verbindingsreeks:

String connectionUrl =
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true; trustServerCertificate=false;" +
     "trustStore=storeName;trustStorePassword=storePassword;" +
     "hostNameInCertificate=hostName";

Opmerking

U kunt ook de waarde van verbindingseigenschappen instellen met behulp van de juiste settermethoden van de klasse SQLServerDataSource .

Als de versleutelingseigenschapwaar is, is de eigenschap trustServerCertificateonwaar en als de servernaam in de verbindingsreeks niet overeenkomt met de servernaam in het TLS-certificaat, wordt de volgende fout uitgegeven: The driver couldn't establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "java.security.cert.CertificateException: Failed to validate the server name in a certificate during Secure Sockets Layer (SSL) initialization." Met versie 7.2 en hoger ondersteunt het stuurprogramma jokertekenpatronen in het meest linkse label van de servernaam in het TLS-certificaat.