Firebird 3.0 Encryption с плагином AES128 - Невозможно подключиться

Я использую Firebird 3 с шифрованием через плагин AES128, найденный здесь. https://www.ibphoenix.com/products/software/encryptionplugin

Я успешно зашифровал базу данных, и я могу подключиться и запросить ее, используя isql однако я не могу подключиться из моей области ColdFusion CFIDE - Источники данных. Я ранее использовал dbcrypt плагин, и он работал нормально, он был просто невероятно медленным по сравнению с незашифрованной базой данных. Хотя с плагином AES128 я получаю ошибку

Сбой проверки соединения для источника данных: devBBL java.sql.SQLException: неподдерживаемый код операции: 97 Основная причина была в том, что: java.sql.SQLException: неподдерживаемый код операции: 97

Информация о моем соединении в окне источников данных CFIDE такая же, как и всегда.

JDBC URL: jdbc:firebirdsql:localhost/3050:C:\fbdb\MASTER25.FDB
Driver Class: org.firebirdsql.jdbc.FBDriver
Driver Name: JayBird
Username: SYSDBA
Password: PASSWORD

Кто-нибудь имеет какие-либо идеи, что заставляет меня получать эту ошибку при попытке подключения? Нужно ли включать какой-то дополнительный аргумент?

1 ответ

Решение

Это происходит, если база данных зашифрована, а плагин требует обратного вызова для получения ключа (вместо использования локального ключа шифрования на сервере).

Если вы настроили использование обратного вызова для получения ключа шифрования, на этапе подключения Firebird отправит пакет с кодом операции op_crypt_key_callback (= 97) (и специфичные для плагина данные) клиенту, и клиент, в свою очередь, должен ответить на него ключом шифрования (или, по крайней мере, специфическими данными плагина, которые плагин может использовать для получения ключа шифрования).

Версии Jaybird до 3.0.4 не поддерживают обработку обратных вызовов ключа шифрования (код операции 97), поэтому возникает эта ошибка.

Базовая поддержка для передачи фиксированного ответа на обратный вызов ключа шифрования была введена в Jaybird 3.0.4. Для более ранних версий, если вы не можете обновить, обходной путь должен был бы использовать локальный ключ шифрования сервера.

Решение

Решение состоит в том, чтобы обновить Jaybird до Jaybird 3.0.4, который представил поддержку обратных вызовов шифрования базы данных. Если плагин шифрования выполняет обратный вызов, но на самом деле не нуждается в использовании содержимого ответа, он будет работать "из коробки".

Если плагин шифрования нуждается в ответе с ключом, вы можете установить ключ в dbCryptConfig собственность соединения. Вы можете использовать значение в кодировке base64, добавив к нему префикс base64: или строковый ключ, который будет преобразован в байты с использованием кодировки UTF-8.

Например, в строке подключения:

jdbc:firebirdsql://localhost/appdbalias?dbCryptConfig=base64:dmVyeXNlY3JldGtleQ==

или же

jdbc:firebirdsql://localhost/appdbalias?dbCryptConfig=verysecretkey

Реализация в настоящее время не поддерживает более продвинутые обратные вызовы.

Jaybird 3.0.4 (или выше) можно загрузить с https://www.firebirdsql.org/en/jdbc-driver/

См. Примечания к выпуску Jaybird 3.0.x, раздел Поддержка шифрования базы данных для получения дополнительной информации.

Временное решение

ПРИМЕЧАНИЕ Используйте этот обходной путь только в том случае, если вы еще не можете выполнить обновление до Jaybird 3.0.4 или выше.

В соответствии с инструкциями на https://www.ibphoenix.com/products/software/encryptionplugin вы можете настроить локальный ключ сервера, используя KeyHolderPlugin = KeyFile вместо KeyHolderPlugin = Callback,

К сожалению, это не работает. Похоже, что рассматриваемый плагин безоговорочно выполняет обратный вызов клиенту, даже если он имеет необходимые данные, доступные локально. Это, возможно, ошибка в этом плагине шифрования, или, возможно, обдуманное дизайнерское решение.

IBPhoenix выпустил новую версию этого плагина, версию 1.2.1, которая позволяет отключить этот обратный вызов с явной настройкой в plugins/KeyFile.conf с настройкой DisableCallback = true,

Другие вопросы по тегам