Firebird 3.0 加密与 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:fbdbMASTER25.FDB
Driver Class: org.firebirdsql.jdbc.FBDriver
Driver Name: JayBird
Username: SYSDBA
Password: PASSWORD

有没有人知道是什么导致我在尝试连接时收到此错误? 我需要包含一些额外的参数吗?

如果数据库已加密并且插件需要回调才能获取密钥(而不是使用服务器本地加密密钥),则会发生这种情况。

如果配置为使用回调来获取加密密钥,则在连接阶段,Firebird 将向客户端发送一个带有操作代码op_crypt_key_callback(= 97)(和插件特定数据)的数据包,客户端反过来应该使用加密密钥(或至少使用插件可用于派生加密密钥的插件特定数据)对此做出响应。

3.0.4 之前的 Jaybird 版本不支持处理加密密钥回调(操作代码 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,它允许您在设置DisableCallback = trueplugins/KeyFile.conf中使用显式设置来禁用此回调。

最新更新