该 keyring_okv
插件是 MySQL Enterprise Edition 的一部分,一个商业产品。要了解更多关于商业产品的信息,请参阅 https://www.mysql.com/products/。
密钥管理互操作协议(KMIP)使密钥管理服务器和其客户端之间的加密密钥进行通信。keyring_okv
密钥环插件使用 KMIP 1.1 协议作为 KMIP 后端的安全客户端。密钥材料仅由后端生成,而不是由 keyring_okv
生成。该插件与以下 KMIP 兼容产品一起工作:
-
Oracle Key Vault
-
Gemalto SafeNet KeySecure 设备
-
Townsend Alliance Key Manager
-
Entrust KeyControl
每个 MySQL Server 实例都必须单独注册为 KMIP 客户端。如果两个或多个 MySQL Server 实例使用相同的一组凭据,它们可能会相互干扰。
该 keyring_okv
插件支持标准 MySQL 密钥环服务接口的所有函数。密钥环操作由这些函数执行,可以在两个级别访问:
-
SQL 接口:在 SQL 语句中,调用 第 8.4.4.15 节,“通用密钥环密钥管理函数” 中描述的函数。
-
C 接口:在 C 语言代码中,调用 第 7.6.9.2 节,“密钥环服务” 中描述的密钥环服务函数。
示例(使用 SQL 接口):
SELECT keyring_key_generate('MyKey', 'AES', 32);
SELECT keyring_key_remove('MyKey');
有关 keyring_okv
允许的密钥值类型的信息,请参阅 第 8.4.4.13 节,“支持的密钥环密钥类型和长度”。
要安装 keyring_okv
,请使用 第 8.4.4.3 节,“密钥环插件安装” 中的通用说明,以及特定于 keyring_okv
的配置信息。
无论 keyring_okv
插件使用哪个 KMIP 后端来存储密钥环,keyring_okv_conf_dir
系统变量配置了 keyring_okv
用于其支持文件的目录的位置。默认值为空,因此您必须在插件可以与 KMIP 后端通信之前设置该变量以命名一个正确配置的目录。否则,keyring_okv
将在服务器启动时写入错误日志,表明它无法通信:
[Warning] Plugin keyring_okv reported: 'For keyring_okv to be
initialized, please point the keyring_okv_conf_dir variable to a directory
containing Oracle Key Vault configuration file and ssl materials'
该 keyring_okv_conf_dir
变量必须命名一个包含以下项目的目录:
-
okvclient.ora
:一个包含 KMIP 后端详细信息的文件,keyring_okv
用于与其通信。 -
ssl
:一个包含证书和密钥文件的目录,以便与 KMIP 后端建立安全连接:CA.pem
、cert.pem
和key.pem
。如果密钥文件是密码保护的,则ssl
目录可以包含一个名为password.txt
的单行文本文件,包含解密密钥文件所需的密码。
both okvclient.ora
文件和 ssl
目录中的证书和密钥文件都是 keyring_okv
正常工作所需的。用于填充配置目录的过程取决于与 keyring_okv
一起使用的 KMIP 后端,如其他地方所述。
由 keyring_okv
使用的配置目录应该具有限制模式,并且只能由运行 MySQL 服务器的帐户访问。例如,在 Unix 和 Unix-like 系统上,使用 /usr/local/mysql/mysql-keyring-okv
目录,以下命令(以 root
执行)创建目录并设置其模式和所有权:
cd /usr/local/mysql
mkdir mysql-keyring-okv
chmod 750 mysql-keyring-okv
chown mysql mysql-keyring-okv
chgrp mysql mysql-keyring-okv
为了在服务器启动过程中使用,keyring_okv
必须使用 --early-plugin-load
选项加载。还需要设置 keyring_okv_conf_dir
系统变量,以告诉 keyring_okv
在哪里找到其配置目录。例如,在服务器 my.cnf
文件中使用以下行,根据平台调整 .so
后缀和目录位置:
[mysqld]
early-plugin-load=keyring_okv.so
keyring_okv_conf_dir=/usr/local/mysql/mysql-keyring-okv
有关 keyring_okv_conf_dir
的更多信息,请参阅 第 8.4.4.19 节,“Keyring 系统变量”。
以下讨论假设您熟悉 Oracle Key Vault。一些相关信息来源:
在 Oracle Key Vault 术语中,使用 Oracle Key Vault 存储和检索安全对象的客户端称为端点。要与 Oracle Key Vault 通信,需要注册为端点并下载和安装端点支持文件。请注意,您必须为每个 MySQL 服务器实例注册一个单独的端点。如果两个或多个 MySQL 服务器实例使用同一个端点,它们可能会相互干扰。
以下过程简要总结了使用 Oracle Key Vault 配置 keyring_okv
的步骤:
-
创建
keyring_okv
插件使用的配置目录。 -
注册 Oracle Key Vault 端点以获取注册令牌。
-
使用注册令牌获取
okvclient.jar
客户端软件下载。 -
安装客户端软件以填充
keyring_okv
配置目录,该目录包含 Oracle Key Vault 支持文件。
使用以下过程配置 keyring_okv
和 Oracle Key Vault,以便它们一起工作。这只是总结了如何与 Oracle Key Vault 交互。有关详细信息,请访问 Oracle Key Vault 站点并查看 Oracle Key Vault 管理员指南。
-
创建包含 Oracle Key Vault 支持文件的配置目录,并确保
keyring_okv_conf_dir
系统变量设置为该目录的名称(详见 General keyring_okv Configuration)。 -
以系统管理员角色登录 Oracle Key Vault 管理控制台。
-
选择“端点”选项卡以访问“端点”页面。在“端点”页面上,单击“添加”。
-
提供所需的端点信息,然后单击“注册”。成功注册将生成注册令牌。
-
从 Oracle Key Vault 服务器注销。
-
重新连接到 Oracle Key Vault 服务器,这次不登录。使用端点注册令牌来注册并请求
okvclient.jar
软件下载。将该文件保存到您的系统中。 -
使用以下命令安装
okvclient.jar
文件(您必须拥有 JDK 1.4 或更高版本):java -jar okvclient.jar -d dir_name [-v]
目录名跟随
-d
选项是要安装提取文件的位置。-v
选项,如果给定,将产生可能有助于命令失败的日志信息。当命令询问 Oracle Key Vault 端点密码时,不要提供密码。相反,按下 Enter。(结果是当端点连接到 Oracle Key Vault 时不需要密码。)
前面的命令将生成一个
okvclient.ora
文件,该文件应该位于由-d
选项命名的目录下:install_dir/conf/okvclient.ora
预期的文件内容包括以下行:
SERVER=host_ip:port_num STANDBY_SERVER=host_ip:port_num
变量
SERVER
是必需的,而变量STANDBY_SERVER
是可选的。keyring_okv
插件尝试与由SERVER
变量命名的主机上的服务器通信,并在失败时回退到STANDBY_SERVER
。Note如果现有的文件不在这种格式中,那么创建一个新的文件,使用前面的示例行。另外,考虑在运行 okvutil 命令之前备份
okvclient.ora
文件。根据需要恢复文件。您可以指定多个备用服务器(最多 64 个)。如果您这样做,
keyring_okv
插件将遍历它们,直到它可以建立连接,并在失败时停止。要添加额外的备用服务器,请编辑okvclient.ora
文件,以指定服务器的 IP 地址和端口号作为STANDBY_SERVER
变量的值。例如:STANDBY_SERVER=host_ip:port_num,host_ip:port_num,host_ip:port_num,host_ip:port_num
确保备用服务器列表保持简短、准确和最新,并删除无效的服务器。存在 20 秒的连接尝试等待时间,因此无效服务器列表的存在可能会显著影响
keyring_okv
插件的连接时间,从而影响服务器启动时间。 -
转到 Oracle Key Vault 安装程序目录,并通过运行以下命令测试设置:
okvutil/bin/okvutil list
输出应该看起来像这样:
Unique ID Type Identifier 255AB8DE-C97F-482C-E053-0100007F28B9 Symmetric Key - 264BF6E0-A20E-7C42-E053-0100007FB29C Symmetric Key -
对于一个新的 Oracle Key Vault 服务器(没有任何密钥的服务器),输出将如下所示,以指示密钥库中没有密钥:
no objects found
-
使用以下命令从
okvclient.jar
文件中提取ssl
目录,包含 SSL 材料:jar xf okvclient.jar ssl
-
将 Oracle Key Vault 支持文件(
okvclient.ora
文件和ssl
目录)复制到配置目录中。 -
(可选) 如果您想密码保护密钥文件,请按照 密码保护 keyring_okv 密钥文件 中的说明进行操作。
完成前面的过程后,重新启动 MySQL 服务器。它将加载 keyring_okv
插件,并使用其配置目录中的文件与 Oracle Key Vault 进行通信。
Gemalto SafeNet KeySecure 设备使用 KMIP 协议(版本 1.1 或 1.2)。keyring_okv
密钥环插件(支持 KMIP 1.1)可以使用 KeySecure 作为其 KMIP 后端用于密钥环存储。
使用以下过程来配置 keyring_okv
和 KeySecure,以便它们一起工作。该描述仅总结了如何与 KeySecure 进行交互。有关详细信息,请参阅 KeySecure 用户指南 中的“添加 KMIP 服务器”部分。
-
创建包含 KeySecure 支持文件的配置目录,并确保
keyring_okv_conf_dir
系统变量设置为该目录的名称(有关详细信息,请参阅 通用 keyring_okv 配置)。 -
在配置目录中,创建一个名为
ssl
的子目录,以便用于存储所需的 SSL 证书和密钥文件。 -
在配置目录中,创建一个名为
okvclient.ora
的文件。它应该具有以下格式:SERVER=host_ip:port_num STANDBY_SERVER=host_ip:port_num
例如,如果 KeySecure 运行在主机 198.51.100.20 上并监听端口 9002,同时也运行在备用主机 203.0.113.125 上并监听端口 8041,那么
okvclient.ora
文件看起来像这样:SERVER=198.51.100.20:9002 STANDBY_SERVER=203.0.113.125:8041
您可以指定多个备用服务器(最多 64 个)。如果您这样做,
keyring_okv
插件将遍历它们,直到它可以建立连接,并在无法连接时失败。要添加备用服务器,请编辑okvclient.ora
文件,以指定服务器的 IP 地址和端口号作为逗号分隔的列表,在STANDBY_SERVER
变量的值中。例如:STANDBY_SERVER=host_ip:port_num,host_ip:port_num,host_ip:port_num,host_ip:port_num
确保备用服务器列表保持简短、准确和最新,删除无效的服务器。存在 20 秒的连接尝试等待时间,因此无效服务器的长列表可能会显著影响
keyring_okv
插件的连接时间,从而影响服务器启动时间。 -
以管理员身份连接到 KeySecure 管理控制台,使用证书颁发机构访问凭证。
-
导航到安全 >> 本地 CA,并创建本地证书颁发机构(CA)。
-
转到受信任的 CA 列表。选择“默认”并单击“属性”。然后,选择“编辑”以编辑受信任的证书颁发机构列表,并添加刚刚创建的 CA。
-
下载 CA 并将其保存在
ssl
目录中,文件名为CA.pem
。 -
导航到安全 >> 证书请求,并创建证书。然后,您可以下载一个压缩的 tar 文件,包含证书 PEM 文件。
-
从下载的文件中提取 PEM 文件。例如,如果文件名为
csr_w_pk_pkcs8.gz
,使用以下命令解压缩和解包:tar zxvf csr_w_pk_pkcs8.gz
提取操作将生成两个文件:
certificate_request.pem
和private_key_pkcs8.pem
。 -
使用以下 openssl 命令来解密私钥并创建一个名为
key.pem
的文件:openssl pkcs8 -in private_key_pkcs8.pem -out key.pem
-
将
key.pem
文件复制到ssl
目录中。 -
将证书请求从
certificate_request.pem
复制到剪贴板中。 -
导航到安全 >> 本地 CA。选择之前创建的 CA(用于创建
CA.pem
文件的 CA),然后单击“签名请求”。从剪贴板中粘贴证书请求,选择证书目的为“客户端”(keyring 是 KeySecure 的客户端),然后单击“签名请求”。结果是一个签名证书,使用所选 CA 签名,在新页面中。 -
将签名证书复制到剪贴板,然后将剪贴板内容保存为
cert.pem
文件在ssl
目录中。 -
(可选) 如果您想密码保护密钥文件,请按照 密码保护 keyring_okv 密钥文件 中的说明进行操作。
完成上述过程后,重新启动 MySQL 服务器。它将加载 keyring_okv
插件,并使用其配置目录中的文件与 KeySecure 进行通信。
Townsend Alliance Key Manager 使用 KMIP 协议。keyring_okv
密钥环插件可以使用 Alliance Key Manager 作为其 KMIP 后端用于密钥环存储。有关更多信息,请参阅 Alliance Key Manager for MySQL。
Entrust KeyControl 使用 KMIP 协议。keyring_okv
密钥环插件可以使用 Entrust KeyControl 作为其 KMIP 后端用于密钥环存储。有关更多信息,请参阅 Oracle MySQL 和 Entrust KeyControl with nShield HSM 集成指南。
您可以选择保护密钥文件使用密码,并提供包含密码的文件,以便启用密钥文件的解密。为此,请更改到 ssl
目录,并执行以下步骤:
-
对
key.pem
密钥文件进行加密。例如,使用以下命令,并在提示符下输入加密密码:$> openssl rsa -des3 -in key.pem -out key.pem.new Enter PEM pass phrase: Verifying - Enter PEM pass phrase:
-
将加密密码保存在
ssl
目录下的单行文本文件password.txt
中。 -
使用以下命令验证加密的密钥文件是否可以被解密。解密后的文件应该在控制台上显示:
$> openssl rsa -in key.pem.new -passin file:password.txt
-
删除原始的
key.pem
文件,并将key.pem.new
重命名为key.pem
。 -
根据需要,改变新
key.pem
文件和password.txt
文件的所有权和访问模式,以确保它们与ssl
目录下的其他文件具有相同的限制。