Utilisation d’Always Encrypted avec enclaves sécurisées avec le pilote JDBC

Télécharger le pilote JDBC

Cette page fournit des informations sur la façon de développer des applications Java à l’aide d’Always Encrypted avec enclaves sécurisées et de Microsoft JDBC Driver 8.2 (ou version ultérieure) pour SQL Server.

La fonctionnalité des enclaves sécurisées a été ajoutée à la fonctionnalité Always Encrypted existante. Les enclaves sécurisées visent à résoudre les problèmes de limitations rencontrées lors de l’utilisation de données Always Encrypted. Avant, les utilisateurs pouvaient seulement effectuer des comparaisons d’égalité sur les données Always Encrypted, et devaient récupérer et déchiffrer les données pour faire d’autres opérations. Les enclaves sécurisées suppriment ces limitations en autorisant les calculs sur les données de texte en clair à l’intérieur d’une enclave sécurisée côté serveur. Une enclave sécurisée est une région protégée de la mémoire au sein du processus SQL Server. Elle sert d’environnement d’exécution approuvé pour traiter les données sensibles au sein du moteur SQL Server. Une enclave sécurisée apparaît sous la forme d’une boîte noire pour le reste de SQL Server et des autres processus sur l’ordinateur d’hébergement. Il n’existe aucun moyen d’afficher les données ou le code à l’intérieur de l’enclave depuis l’extérieur, même avec un débogueur.

Prérequis

  • Assurez-vous que Microsoft JDBC Driver 8.2 (ou version ultérieure) pour SQL Server est installé sur votre machine de développement.
  • Vérifiez que les dépendances d’environnement comme les DLL, les magasins de clés, etc. se trouvent dans les bons chemins. Always Encrypted avec enclaves sécurisées, module complémentaire de la fonctionnalité Always Encrypted existante, partage des prérequis similaires.

Notes

Si vous utilisez une version antérieure de JDK 8, vous devrez peut-être télécharger et installer les fichiers de stratégie Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction. Veillez à lire le fichier Lisez-moi inclus dans le fichier zip pour obtenir les instructions d’installation et des informations pertinentes sur les éventuels problèmes d’importation/exportation.

Vous pouvez télécharger les fichiers de stratégie sur Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Download

Configuration des enclaves sécurisées

Suivez Tutoriel : Bien démarrer dans l’utilisation d’Always Encrypted avec enclaves sécurisées dans SQL Server, Tutoriel : Bien démarrer dans l’utilisation d’Always Encrypted avec enclaves Intel SGX dans Azure SQL Database, ou Tutoriel : Bien démarrer dans l’utilisation d’Always Encrypted avec enclaves VBS dans Azure SQL Database pour bien démarrer avec les enclaves sécurisées. Pour plus d’informations, consultez Always Encrypted avec enclaves sécurisées.

Propriétés de chaîne de connexion

Pour activer les calculs d’enclave pour une connexion de base de données, vous devez définir les mots clés de chaînes de connexion suivants, en plus de l’activation d’Always Encrypted.

  • enclaveAttestationProtocol : spécifie un protocole d’attestation.

    • Si vous utilisez SQL Server et le service Guardian hôte (SGH), ce mot clé doit avoir la valeur HGS.
    • Si vous utilisez Azure SQL Database et Microsoft Azure Attestation, ce mot clé doit avoir la valeur AAS.
    • Si vous utilisez des enclaves sécurisées dans un environnement où les services d’attestation ne sont pas disponibles, la valeur de ce mot clé doit être NONE. Nécessite JDBC 12.2 ou ultérieur.
  • enclaveAttestationUrl: : spécifie une URL d’attestation (un point de terminaison de service d’attestation). Vous devez obtenir une URL d’attestation pour votre environnement auprès de votre administrateur de services fédérés d’attestation.

Les utilisateurs doivent activer columnEncryptionSetting et configurer correctement les deux propriétés de chaîne de connexion ci-dessus pour activer Always Encrypted avec enclaves sécurisées à partir de Pilote Microsoft JDBC pour SQL Server.

Utilisation d’enclaves sécurisées

Une fois que les propriétés de connexion aux enclaves ont été correctement définies, la fonctionnalité est transparente pour l’utilisateur. Le pilote détermine automatiquement si la requête nécessite l’utilisation d’une enclave sécurisée. Les exemples ci-dessous montrent des requêtes qui déclenchent des calculs d’enclave. Vous trouverez la configuration de la base de données et de la table dans Tutoriel : Bien démarrer dans l’utilisation d’Always Encrypted avec enclaves sécurisées dans SQL Server ou Tutoriel : Bien démarrer dans l’utilisation d’Always Encrypted avec enclaves sécurisées dans Azure SQL Database.

Les requêtes enrichies déclenchent des calculs d’enclave :

private static final String URL = "jdbc:sqlserver://<server>:<port>;encrypt=true;user=<username>;password=<password>;databaseName=ContosoHR;columnEncryptionSetting=enabled;enclaveAttestationUrl=<attestation-url>;enclaveAttestationProtocol=<attestation-protocol>;";
try (Connection c = DriverManager.getConnection(URL)) {
    try (PreparedStatement p = c.prepareStatement("SELECT * FROM Employees WHERE SSN LIKE ?")) {
        p.setString(1, "%6818");
        try (ResultSet rs = p.executeQuery()) {
            while (rs.next()) {
                // Do work with data
            }
        }
    }
    
    try (PreparedStatement p = c.prepareStatement("SELECT * FROM Employees WHERE SALARY > ?")) {
        ((SQLServerPreparedStatement) p).setMoney(1, new BigDecimal(0));
        try (ResultSet rs = p.executeQuery()) {
            while (rs.next()) {
                // Do work with data
            }
        }
    }
}

L’activation du chiffrement sur une colonne déclenche également des calculs d’enclave :

private static final String URL = "jdbc:sqlserver://<server>:<port>;encrypt=true;user=<username>;password=<password>;databaseName=ContosoHR;columnEncryptionSetting=enabled;enclaveAttestationUrl=<attestation-url>;enclaveAttestationProtocol=<attestation-protocol>;";
try (Connection c = DriverManager.getConnection(URL);Statement s = c.createStatement()) {
    s.executeUpdate("ALTER TABLE Employees ALTER COLUMN SSN CHAR(11) NULL WITH (ONLINE = ON)");
}

Utilisateurs de Java 8

Cette fonctionnalité requiert l’algorithme de signature RSASSA-PSA. Cet algorithme a été ajouté dans JDK 11, mais il n’a pas été rétroporté dans JDK 8. Les utilisateurs qui veulent utiliser cette fonctionnalité avec la version JDK 8 de Pilote Microsoft JDBC pour SQL Server ont deux options : charger leur propre fournisseur qui prend en charge l’algorithme de signature RSASSA-PSA ou ajouter la dépendance facultative BouncyCastleProvider. La dépendance sera supprimée à l’avenir si l’algorithme de signature est rétroporté dans JDK 8 ou si le cycle de vie du support de JDK 8 se termine.

Voir aussi

Utilisation d'Always Encrypted avec le pilote JDBC