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.
127 preguntas
0 comentarios No hay comentarios
{count} votos

1 respuesta

Ordenar por: Muy útil
  1. Jonathan Pereira Castillo 12,570 Puntos de reputación Proveedor de Microsoft
    2025-01-15T22:03:51.88+00:00

    ¡Hola Gonzalez Heras, Daniel!

    Esperamos que este mensaje te encuentre bien.

    Lamentamos sinceramente la demora en abordar tu tema en este foro.  

    Para registrar el proveedor MSSQL_JAVA_KEYSTORE en SQL Server 2019, sigue estos pasos:

    Registrar el Proveedor:

    • Asegúrate de que el proveedor de almacén de claves de Java esté correctamente configurado y registrado en tu entorno de SQL Server. Puedes hacerlo utilizando la clase SQLColumnEncryptionJavaKeyStoreProvider en tu aplicación Java.

    Verificar la Firma:

    • SQL Server verifica la firma de una clave maestra de columna utilizando el proveedor de almacén de claves registrado. Asegúrate de que la firma sea válida y que el proveedor esté correctamente configurado.

    Obtener la Firma Correcta:

    • Si la firma es incorrecta, revisa la configuración del proveedor de almacén de claves y asegúrate de que la clave maestra de columna esté correctamente firmada.

    Para más detalles, consulta la documentación oficial de Microsoft

    Si no recibimos una respuesta tuya en los próximos días, procederemos a cerrar el tema. Sin embargo, queremos asegurarte que siempre estamos disponibles para cualquier asistencia que puedas necesitar.

    Agradecemos tu comprensión y estamos aquí para ayudar en lo que sea necesario.

    Estaré atento a tu respuesta.,

     Jonathan

    ----------*

    Tu opinión es muy importante para nosotros! Si esta respuesta resolvió tu consulta, por favor haz clic en ''. Esto nos ayuda a mejorar continuamente la calidad y relevancia de nuestras soluciones.

    0 comentarios No hay comentarios

Su respuesta

Las respuestas se pueden marcar como respuestas aceptadas por el autor de la pregunta, lo que ayuda a los usuarios a conocer la respuesta que resolvió el problema del autor.