Connexion avec le chiffrement

Télécharger le pilote JDBC

Les exemples de cet article décrivent comment utiliser les propriétés de chaîne de connexion qui permettent aux applications d’utiliser le chiffrement TLS (Transport Layer Security) dans une application Java. Pour plus d’informations sur ces nouvelles propriétés de chaîne de connexion, comme encrypt, trustServerCertificate, trustStore, trustStorePassword et hostNameInCertificate, consultez Définition des propriétés de connexion.

Configuration de la connexion

Quand la propriété encrypt est définie sur true et que la propriété trustServerCertificate est définie sur true, le Pilote Microsoft JDBC pour SQL Server ne valide pas le certificat TLS SQL Server. Ce paramètre est courant pour autoriser les connexions dans les environnements de test, par exemple quand l’instance SQL Server a seulement un certificat auto-signé.

L’exemple de code suivant montre comment définir la propriété trustServerCertificate dans une chaîne de connexion :

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

Quand la propriété encrypt est définie sur true et que la propriété trustServerCertificate est définie sur false, le Pilote Microsoft JDBC pour SQL Server valide le certificat TLS SQL Server. La validation du certificat de serveur est une partie de la négociation TLS qui garantit qu’il s’agit du serveur correct avec lequel établir une connexion. Pour valider le certificat de serveur, les informations d’approbation doivent être fournies au moment de la connexion en utilisant explicitement les propriétés de connexion trustStore et trustStorePassword, ou en utilisant implicitement le magasin d’approbations par défaut de la machine virtuelle Java (JVM) sous-jacente.

La propriété trustStore spécifie le chemin (y compris le nom de fichier) du fichier trustStore de certificat, qui contient la liste des certificats approuvés par le client. La propriété trustStorePassword spécifie le mot de passe utilisé pour vérifier l’intégrité des données trustStore. Pour plus d'informations sur l'utilisation du magasin d'approbations par défaut de la machine virtuelle Java, consultez Configuration du client pour le chiffrement.

L’exemple de code suivant montre comment définir les propriétés trustStore et trustStorePassword dans une chaîne de connexion :

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

Le pilote JDBC fournit une propriété supplémentaire, hostNameInCertificate, qui spécifie le nom d’hôte du serveur. La valeur de cette propriété doit correspondre à la propriété de sujet du certificat.

L’exemple de code suivant montre comment utiliser la propriété hostNameInCertificate dans une chaîne de connexion :

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

Notes

Vous pouvez également définir la valeur des propriétés de connexion en utilisant les méthodes setter appropriées fournies par la classe SQLServerDataSource.

Si la propriété encrypt est définie sur true et que la propriété trustServerCertificate est définie sur false, et si le nom du serveur dans la chaîne de connexion ne correspond pas au nom du serveur du certificat TLS, le message d’erreur suivant s’affiche : 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.". À partir de la version 7.2, le pilote prend en charge les critères spéciaux de caractères génériques mentionnés sur l’étiquette située tout à gauche du nom du serveur dans le certificat TLS.