6.4.4.4 使用 keyring_okv KMIP 插件
Note
keyring_okv
插件是 MySQL Enterprise Edition(商业产品)中的扩展。要了解有关商品的更多信息,请参阅https://www.mysql.com/products/。
密钥 Management 互操作性协议(KMIP)支持在密钥 Management 服务器及其 Client 端之间进行加密密钥通信。 keyring_okv
键环插件使用 KMIP 1.1 协议作为 KMIP 后端的 Client 端进行安全通信。密钥环材料仅由后端生成,而不由keyring_okv
生成。该插件可与以下 KMIP 兼容产品一起使用:
-
Oracle Key 保管库
-
金雅拓 SafeNet KeySecure 设备
-
汤森 union 关键 Manager
keyring_okv
插件支持包含标准 MySQL Keyring 服务接口的功能。这些功能执行的密钥环操作可从两个级别访问:
-
SQL 接口:在 SQL 语句中,调用第 6.4.4.8 节“通用密钥环密钥 Management 功能”中描述的用户定义函数(UDF)。
-
C 接口:使用 C 语言代码,调用第 28.3.2 节“密钥环服务”中描述的密钥环服务功能。
示例(使用 UDF):
SELECT keyring_key_generate('MyKey', 'AES', 32);
SELECT keyring_key_remove('MyKey');
有关keyring_okv
,第 6.4.4.6 节“支持的密钥环密钥类型和长度”允许的密钥类型的信息。
要安装keyring_okv
插件,请使用第 6.4.4.1 节“安装 Keyring 插件”中的常规密钥环安装说明以及此处找到的keyring_okv
特定的配置信息。
常规 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
:一个文件,其中包含keyring_okv
将与之通信的 KMIP 后端的详细信息。 -
ssl
:包含与 KMIP 后端构建安全连接所需的证书和密钥文件的目录:CA.pem
,cert.pem
和key.pem
。从 MySQL 5.7.20 开始,如果密钥文件受密码保护,则ssl
目录可以包含一个名为password.txt
的单行文本文件,其中包含解密密钥文件所需的密码。
okvclient.ora
文件和ssl
目录以及证书和密钥文件都是keyring_okv
正常工作所必需的。使用这些文件填充配置目录的过程取决于keyring_okv
所使用的 KMIP 后端,如其他地方所述。
keyring_okv
用作其支持文件的位置的配置目录应具有限制性模式,并且只能由用于运行 MySQL 服务器的帐户访问。例如,在 Unix 和类似 Unix 的系统上,要使用/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
为了在服务器启动过程中可用,必须使用--early-plugin-load选项加载keyring_okv
。另外,设置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的其他信息,请参见第 6.4.4.11 节,“密钥环系统变量”。
为 Oracle Key Vault 配置 keyring_okv
此处的讨论假定您熟悉 Oracle Key Vault。一些相关的信息来源:
在 Oracle Key Vault 术语中,使用 Oracle Key Vault 存储和检索安全性对象的 Client 端称为端点。要与 Oracle Key Vault 通信,必须注册为端点并通过下载和安装端点支持文件进行注册。
以下过程简要总结了设置keyring_okv
以与 Oracle Key Vault 一起使用的过程:
-
创建供
keyring_okv
插件使用的配置目录。 -
在 Oracle Key Vault 中注册端点以获取注册令牌。
-
使用注册令牌获得
okvclient.jar
Client 端软件下载。 -
安装 Client 端软件以填充包含 Oracle Key Vault 支持文件的
keyring_okv
配置目录。
使用以下过程将keyring_okv
和 Oracle Key Vault 配置为协同工作。该描述仅总结了如何与 Oracle Key Vault 进行交互。有关详细信息,请访问Oracle Key 保管库网站,并查阅《 Oracle Key VaultManagement 指南》。
-
创建将包含 Oracle Key Vault 支持文件的配置目录,并确保将keyring_okv_conf_dir系统变量设置为该目录的名称(有关详细信息,请参阅常规 keyring_okv 配置)。
-
以具有系统 Management 员角色的用户身份登录到 Oracle Key VaultManagement 控制台。
-
选择“端点”选项卡以到达“端点”页面。在“端点”页面上,单击“添加”。
-
提供所需的端点信息,然后单击注册。端点类型应为“其他”。成功注册会产生一个注册令牌。
-
从 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
文件,该文件应位于前面的 java -jar 命令中-d
选项命名的目录下的此位置:
install_dir/conf/okvclient.ora
文件内容包括如下所示的行:
SERVER=host_ip:port_num
STANDBY_SERVER=host_ip:port_num
keyring_okv
插件尝试与由SERVER
变量命名的主机上运行的服务器进行通信,如果失败则回退到STANDBY_SERVER
:
-
对于
SERVER
变量,必须在okvclient.ora
文件中进行设置。 -
对于
STANDBY_SERVER
变量,自 MySQL 5.7.19 起,在okvclient.ora
文件中的设置是可选的。在 MySQL 5.7.19 之前,必须设置STANDBY_SERVER
。如果生成okvclient.ora
且没有为STANDBY_SERVER
设置,则keyring_okv
无法初始化。解决方法是检查oraclient.ora
并为STANDBY_SERVER
添加“虚拟”设置(如果缺少)。例如:
STANDBY_SERVER=127.0.0.1:5696
- 转到 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 服务器(其中没有任何密钥的服务器),输出看起来像这样,以 table 明 Vault 中没有密钥:
no objects found
- 使用此命令从
okvclient.jar
文件中提取包含 SSL 资料的ssl
目录:
jar xf okvclient.jar ssl
-
将 Oracle Key Vault 支持文件(
okvclient.ora
文件和ssl
目录)复制到配置目录中。 -
(可选)如果要用密码保护密钥文件,请使用密码保护 keyring_okv 密钥文件中的说明。
完成上述步骤后,重新启动 MySQL 服务器。它加载keyring_okv
插件,而keyring_okv
使用其配置目录中的文件与 Oracle Key Vault 通信。
为金雅拓 SafeNet KeySecure 设备配置 keyring_okv
金雅拓 SafeNet KeySecure 设备使用 KMIP 协议(版本 1.1 或 1.2)。从 MySQL 5.7.18 开始,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 上侦听,则okvclient.ora
文件如下所示:
SERVER=198.51.100.20:9002
STANDBY_SERVER=198.51.100.20:9002
-
以具有用于证书颁发机构访问权限的凭据的 Management 员身份连接到 KeySecureManagement 控制台。
-
导航到“安全性>>本地 CA”,然后创建一个本地证书颁发机构(CA)。
-
转到受信任的 CA 列 table。选择默认,然后单击属性。然后,为“受信任的证书颁发机构列 table”选择“编辑”并添加刚刚创建的 CA。
-
下载 CA,并将其保存为
ssl
目录中的CA.pem
文件。 -
导航到安全>>证书申请并创建证书。然后,您将能够下载包含证书 PEM 文件的压缩 tar 文件。
-
从下载的文件中提取 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),然后单击“签署请求”。从剪贴板粘贴证书申请,选择 Client 端的证书用途(密钥环是 KeySecure 的 Client 端),然后单击“签名申请”。结果是在新页面中与所选 CA 签署的证书。 -
将签名的证书复制到剪贴板,然后将剪贴板的内容另存为
ssl
目录中名为cert.pem
的文件。 -
(可选)如果要用密码保护密钥文件,请使用密码保护 keyring_okv 密钥文件中的说明。
完成上述步骤后,重新启动 MySQL 服务器。它加载keyring_okv
插件,而keyring_okv
使用其配置目录中的文件与 KeySecure 通信。
为 Townsend Alliance 密钥 Management 器配置 keyring_okv
汤森 union 密钥 Management 器使用 KMIP 协议。 keyring_okv
密钥环插件可以使用 Alliance Key Manager 作为其 KMIP 后端来存储密钥环。有关更多信息,请参见MySQLunion 密钥 Management 器。
密码保护 keyring_okv 密钥文件
从 MySQL 5.7.20 开始,您可以选择使用密码保护密钥文件,并提供一个包含密码的文件以使密钥文件能够被解密。为此,请将位置更改为ssl
目录,然后执行以下步骤:
- 加密
key.pem
密钥文件。例如,使用如下命令,并在提示下 Importing 加密密码:
shell> openssl rsa -des3 -in key.pem -out key.pem.new
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-
将加密密码保存在
ssl
目录中名为password.txt
的单行文本文件中。 -
验证可以使用以下命令对加密的密钥文件进行解密。解密后的文件应显示在控制台上:
shell> openssl rsa -in key.pem.new -passin file:password.txt
-
删除原始的
key.pem
文件,并将key.pem.new
重命名为key.pem
。 -
根据需要更改新的
key.pem
文件和password.txt
文件的所有权和访问模式,以确保它们与ssl
目录中的其他文件具有相同的限制。