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

问题描述 投票:0回答:1

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

我已成功加密数据库,并且可以使用

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

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

jdbc firebird jaybird firebird-3.0
1个回答
3
投票

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

如果配置为使用回调来获取加密密钥,则在附加阶段,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/encryption-plugin.html 上的说明,您可以使用

KeyHolderPlugin = KeyFile
而不是
KeyHolderPlugin = Callback
来配置服务器本地密钥。

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

IBPhoenix 发布了此插件的新版本,版本 1.2.1,它允许您通过

plugins/KeyFile.conf
中的显式设置和设置
DisableCallback = true
来禁用此回调。

© www.soinside.com 2019 - 2024. All rights reserved.