使用 AES128 插件的 Firebird 3.0 加密 - 无法连接

Firebird 3.0 Encryption with AES128 plugin - Unable to connect

我正在使用 Firebird 3,通过此处的 AES128 插件进行加密。 https://www.ibphoenix.com/products/software/encryptionplugin

我已成功加密数据库,我可以使用 isql 连接和查询它,但是我无法从我的 ColdFusion CFIDE - 数据源区域进行连接。我以前使用 dbcrypt 插件并且它工作正常,与未加密的数据库相比它非常慢。不过,使用 AES128 插件时,我得到了错误

Connection verification failed for data source: devBBL java.sql.SQLException: Unsupported operation code: 97 The root cause was that: java.sql.SQLException: Unsupported operation code: 97

我在 CFIDE 数据源中的连接信息 window 与以往一样。

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

有谁知道是什么导致我在尝试连接时收到此错误消息?我需要添加一些额外的参数吗?

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

如果配置为使用回调来获取加密密钥,在附加阶段,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 发行说明,第 Database encryption support 部分了解更多信息。

解决方法

注意 只有在您还不能升级到 Jaybird 3.0.4 或更高版本时才使用此解决方法。

根据 https://www.ibphoenix.com/products/software/encryptionplugin 上的说明,您可以使用 KeyHolderPlugin = KeyFile 而不是 KeyHolderPlugin = Callback 配置服务器本地密钥。

不幸的是,这不起作用。看起来有问题的插件正在无条件地执行对客户端的回调,即使它在本地具有可用的必要数据也是如此。这可能是此加密插件中的错误,或者可能是故意的设计决定。

IBPhoenix 发布了此插件的新版本,版本 1.2.1,它允许您在 plugins/KeyFile.conf 中通过设置 DisableCallback = true.

中的显式设置禁用此回调