Шифрование столбцов SQL Server с использованием хранилища ключей Azure и Spring Boot - PullRequest
1 голос
/ 17 мая 2019

Мне нужно сохранить данные на сервере SQL с шифрованием столбцов с помощью хранилища ключей Azure

        @Bean
    @Primary
    public DataSource dataSource() throws SQLException {

        KeyVaultClient client = new KeyVaultClient(keyVaultCredentialService);

        String userName = client.getSecret(vaultURL, "spring-datasource-username").value();
        String password = client.getSecret(vaultURL, "spring-datasource-password").value();
        String url = "jdbc:sqlserver://test.database.windows.net;databaseName=encryption_demo;columnEncryptionSetting=Enabled;"; 

        String driverClass = client.getSecret(vaultURL, "spring-datasource-driverClassName").value();

        DataSource dataSource = DataSourceBuilder
                .create()
                .username(userName)
                .password(password)
                .url(url)
                .driverClassName(driverClass)
                .build();

SQLServerColumnEncryptionAzureKeyVaultProvider akvProvider = new SQLServerColumnEncryptionAzureKeyVaultProvider(clientId, clientKey);

Map<String, SQLServerColumnEncryptionKeyStoreProvider> keyStoreMap = new HashMap<String, SQLServerColumnEncryptionKeyStoreProvider>();

keyStoreMap.put(akvProvider.getName(), akvProvider);        SQLServerConnection.registerColumnEncryptionKeyStoreProviders(keyStoreMap);

return dataSource;

}

application.properties

azure.keyvault.uri= ....
azure.keyvault.client-id= ...
azure.keyvault.client-key= ...

SQLServer table

CREATE TABLE [dbo].[Patients](
    [id] [int] PRIMARY KEY NOT NULL,
    [ssn] [varchar](max) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Auto1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
    [first_name] [varchar](max) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Auto1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL,
    [last_name] [varchar](max) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Auto1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL
) 
GO

При сохранении данных в БД появляется ошибка: Причина: com.microsoft.sqlserver.jdbc.SQLServerException: внутренняя ошибка при шифровании: недопустимый размер ключа

1 Ответ

0 голосов
/ 20 мая 2019

Загрузите и установите файлы политик неограниченной юрисдикции расширения криптографии Java (JCE). Обязательно прочтите Readme, включенный в zip-файл, для инструкций по установке и соответствующих сведений о возможных проблемах экспорта / импорта.

Если используется mssql-jdbc-X.X.X.jre7.jar или sqljdbc41.jar, файлы политики можно загрузить из Файлы политики неограниченной юрисдикции расширения криптографии Java (JCE) 7 Загрузить .

При использовании mssql-jdbc-X.X.X.jre8.jar или sqljdbc42.jar файлы политики можно загрузить из Файлы политики неограниченной юрисдикции Java Cryptography Extension (JCE) 8 Загрузить .

Если используется mssql-jdbc-X.X.X.jre9.jar, файл политики загружать не нужно. Политика юрисдикции в Java 9 по умолчанию предусматривает неограниченное шифрование .

Для более подробной информации, вы можете обратиться к этой статье .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...