Sql server 2019 - Uso de Always Encrypted con enclaves seguros -MSSQL_JAVA_KEYSTORE

Gonzalez Heras, Daniel 0 Puntos de reputación
2024-06-05T09:26:39.0833333+00:00

Siguiendo los pasos de la documentación de sql server 2019: https://learn.microsoft.com/es-es/sql/connect/jdbc/using-always-encrypted-with-secure-enclaves-with-the-jdbc-driver?view=sql-server-ver15 and https://learn.microsoft.com/es-es/sql/connect/jdbc/using-always-encrypted-with-the-jdbc-driver?view=sql-server-ver15

Acciones realizadas:

  1. Crear una clave maestra de columna para el almacén de claves de Java con el alias AlwaysEncryptedKey.
  2. (2.1) Cree la clave maestra de columna sin [ENCLAVE_COMPUTACIONES (SIGNATURE = firma)]: CREATE COLUMN MASTER KEY [CMK_Java] WITH ( KEY_STORE_PROVIDER_NAME = N'MSSQL_JAVA_KEYSTORE', KEY_PATH = N'AlwaysEncryptedKey' );
  3. (2.2). Cree la clave maestra de columna con [ENCLAVE_COMPUTATIONES (SIGNATURE = firma)]: CREATE COLUMN MASTER KEY [CMK_Java] WITH ( KEY_STORE_PROVIDER_NAME = N'MSSQL_JAVA_KEYSTORE', KEY_PATH = N'AlwaysEncryptedKey', ,ENCLAVE_COMPUTATIONS (SIGNATURE = 0x57E09D7F67A592459D40.....) );
  4. Cree la clave de cifrado de columna [CEK_Java] con java clase 1.8 (https://learn.microsoft.com/es-es/sql/connect/jdbc/using-always-encrypted-with-the-jdbc-driver?view=sql-server-ver15#use-column-master-key-store-providers-for-programmatic-key-provisioning or https://medium.com/captech-corner/integrating-sql-server-always-encrypted-into-java-application-3904ce2b48c9), y se crea en el servidor SQL la CEK: COLUMN ENCRYPTION KEY [CEK_Java] WITH VALUES ( COLUMN_MASTER_KEY = [CMK_Java], ALGORITHM = 'RSA_OAEP', ENCRYPTED_VALUE = 0x010A000001650.... )
  5. Sobre una tabla "Empleados" creada previamente, se intenta cifrar el campo NIF: ALTER TABLE [Empleados] ALTER COLUMN [NIF] [char] COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Java], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON);

..con los siguientes resultados:

  • Si has hecho el punto 2.1. al ejecutar 4 recibes el error: "Cannot alter column 'NIF'. The statement attempts to encrypt, decrypt or re-encrypt the column in-place using a secure enclave , but the current and/or the target column encryption key for the column is not enclave-enabled."
  • Si has hecho el punto (2.2.) al ejecutar 4 recibes el error: "An error occurred while executing batch. Error message is: Unable to verify a column master key signature. Error message: Invalid key store provider name: 'MSSQL_JAVA_KEYSTORE'. A key store provider name must denote either a system key store provider or a registered custom key store provider. Valid system key store provider names are: 'MSSQL_CERTIFICATE_STORE', 'MSSQL_CNG_STORE', 'MSSQL_CSP_PROVIDER'. Valid (currently registered) custom key store provider names are: 'AZURE_KEY_VAULT'. Please verify key store provider information in column master key definitions in the database, and verify all custom key store providers used in your application are registered properly."

Preguntas:

  • Entiendo que el error recibido al hacer el punto 2.1 es porque no está habilitada la llave maestra enclave habilitado (el enclave habilitado se hace en el punto 2.2).
  • ¿Cómo puedo registrar el proveedor MSSQL_JAVA_KEYSTORE?
  • ¿Cómo puede SQL Server 2019 verificar la firma de una clave maestra de columna?
  • Si la firma es incorrecta ¿cómo puedo obtenerla correctamente?
  • ¿Existe alguna página donde se detallen con mayor profundidad los puntos detallados?

Muchas gracias.

SQL Server
SQL Server
Familia de sistemas de análisis y administración de bases de datos relacionales de Microsoft para soluciones de comercio electrónico, línea de negocio y almacenamiento de datos.
101 preguntas
0 comentarios No hay comentarios
{count} votos

Su respuesta

Las respuestas pueden ser marcadas como Respuestas aceptadas por el autor de la pregunta, lo que indica a los usuarios que la respuesta resolvió su problema.