Documentation Home

6.4.4.8 使用 keyring_okv KMIP 插件

笔记

keyring_okv插件是商业产品 MySQL Enterprise Edition 中包含的扩展。要了解有关商业产品的更多信息,请参阅https://www.mysql.com/products/

密钥管理互操作性协议 (KMIP) 支持密钥管理服务器与其客户端之间的加密密钥通信。密钥环插件使用keyring_okv KMIP 1.1 协议作为 KMIP 后端的客户端进行安全通信。密钥环材料由后端专门生成,而不是由 keyring_okv. 该插件适用于这些 KMIP 兼容产品:

  • 甲骨文密钥库

  • 金雅拓 SafeNet KeySecure 设备

  • Townsend Alliance 主要经理

  • 委托KeyControl

每个 MySQL 服务器实例都必须单独注册为 KMIP 的客户端。如果两个或多个 MySQL 服务器实例使用同一组凭据,它们可能会干扰彼此的功能。

keyring_okv插件支持构成标准 MySQL Keyring 服务接口的功能。可以在两个级别访问由这些函数执行的密钥环操作:

示例(使用 SQL 接口):

SELECT keyring_key_generate('MyKey', 'AES', 32);
SELECT keyring_key_remove('MyKey');

有关第 6.4.4.13 节“支持的密钥环密钥类型和长度”keyring_okv允许的 密钥值特征的信息。

要安装keyring_okv,请使用 第 6.4.4.3 节“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.orakeyring_okv:一个文件,其中包含与之通信 的 KMIP 后端的详细信息 。

  • ssl:包含与 KMIP 后端建立安全连接所需的证书和密钥文件的目录: CA.pem、、 cert.pemkey.pem。如果密钥文件受密码保护,该ssl目录可以包含一个名为的单行文本文件 password.txt,其中包含解密密钥文件所需的密码。

需要具有证书和密钥文件 的okvclient.ora文件和 目录才能正常工作。用于使用这些文件填充配置目录的过程取决于与 一起使用的 KMIP 后端,如其他地方所述。 sslkeyring_okvkeyring_okv

用作其支持文件位置的配置目录 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

要在服务器启动过程中可用, 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,请参阅 第 6.4.4.19 节,“密钥环系统变量”

为 Oracle Key Vault 配置 keyring_okv

此处的讨论假定您熟悉 Oracle Key Vault。一些相关的信息来源:

在 Oracle Key Vault 术语中,使用 Oracle Key Vault 存储和检索安全对象的客户端称为端点。要与 Oracle Key Vault 通信,需要注册为端点并通过下载和安装端点支持文件进行注册。请注意,您必须为每个 MySQL 服务器实例注册一个单独的端点。如果两个或多个 MySQL 服务器实例使用相同的端点,它们可能会干扰彼此的功能。

以下过程简要总结了keyring_okv使用 Oracle Key Vault 进行设置的过程:

  1. 创建 keyring_okv要使用的插件的配置目录。

  2. 向 Oracle Key Vault 注册端点以获取注册令牌。

  3. 使用注册令牌获取 okvclient.jar客户端软件下载。

  4. 安装客户端软件以填充 keyring_okv包含 Oracle Key Vault 支持文件的配置目录。

使用以下过程配置 keyring_okv和 Oracle Key Vault 协同工作。此描述仅总结了如何与 Oracle Key Vault 交互。有关详细信息,请访问 Oracle Key Vault站点并查阅 Oracle Key Vault 管理员指南。

  1. 创建包含 Oracle Key Vault 支持文件的配置目录,并确保将 keyring_okv_conf_dir 系统变量设置为命名该目录(有关详细信息,请参阅常规 keyring_okv 配置)。

  2. 以具有系统管理员角色的用户身份登录到 Oracle Key Vault 管理控制台。

  3. 选择 Endpoints 选项卡以到达 Endpoints 页面。在端点页面上,单击添加。

  4. 提供所需的端点信息并单击注册。终结点类型应为其他。成功注册会产生一个注册令牌。

  5. 从 Oracle Key Vault 服务器注销。

  6. 再次连接到 Oracle Key Vault 服务器,这次不登录。使用端点注册令牌注册并请求okvclient.jar 软件下载。将此文件保存到您的系统。

  7. okvclient.jar使用以下命令 安装文件(您必须具有 JDK 1.4 或更高版本):

    java -jar okvclient.jar -d dir_name [-v]

    选项后面的目录名称-d 是安装提取文件的位置。该-v选项(如果给出)会导致生成日志信息,如果命令失败,这些信息可能会有用。

    当命令要求提供 Oracle Key Vault 端点密码时,不要提供密码。相反,请按 Enter。(结果是端点连接到 Oracle Key Vault 时不需要密码。)

  8. 前面的命令生成一个 okvclient.ora文件,该文件应该位于 -d前面的java -jar命令中的选项命名的目录下的这个位置:

    install_dir/conf/okvclient.ora

    文件内容包括如下所示的行:

    SERVER=host_ip:port_num
    STANDBY_SERVER=host_ip:port_num

    SERVER变量是必需的, 变量STANDBY_SERVER是可选的。该keyring_okv插件尝试与在变量命名的主机上运行的服务器通信,如果失败则 SERVER回退。STANDBY_SERVER

    从 MySQL 8.0.29 开始,您可以指定多个备用服务器(最多 64 个)。如果你这样做, keyring_okv插件会迭代它们直到它可以建立连接,如果不能则失败。要添加额外的备用服务器,请编辑该 文件以将服务器的 IP 地址和端口号指定为变量okvclient.ora值中的逗号分隔列表 。STANDBY_SERVER例如:

    STANDBY_SERVER=host_ip:port_num,host_ip:port_num,host_ip:port_num,host_ip:port_num

    确保备用服务器列表保持简短、准确和最新,并删除不再有效的服务器。每次连接尝试都有 20 秒的等待时间,因此一长串无效服务器的存在会显着影响 keyring_okv插件的连接时间,从而影响服务器启动时间。

  9. 转到 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
  10. 使用此命令从文件中提取ssl 包含 SSL 材料的 okvclient.jar目录:

    jar xf okvclient.jar ssl
  11. 将 Oracle Key Vault 支持文件( okvclient.ora文件和 ssl目录)复制到配置目录中。

  12. (可选)如果您希望使用密码保护密钥文件,请使用 密码保护 keyring_okv 密钥文件中的说明。

完成上述步骤后,重启MySQL服务器。它加载keyring_okv插件并 keyring_okv使用其配置目录中的文件与 Oracle Key Vault 进行通信。

为金雅拓 SafeNet KeySecure 设备配置 keyring_okv

Gemalto SafeNet KeySecure Appliance 使用 KMIP 协议(​​版本 1.1 或 1.2)。密钥环插件(支持 KMIP 1.1)可以使用keyring_okv KeySecure 作为密钥环存储的 KMIP 后端。

使用以下过程配置 keyring_okv和 KeySecure 一起工作。该描述仅总结了如何与 KeySecure 交互。有关详细信息,请参阅KeySecure 用户指南中名为添加 KMIP 服务器的部分 。

  1. 创建包含 KeySecure 支持文件的配置目录,并确保将 keyring_okv_conf_dir 系统变量设置为命名该目录(有关详细信息,请参阅常规 keyring_okv 配置)。

  2. 在配置目录中,创建一个名为 name 的子目录ssl,用于存储所需的 SSL 证书和密钥文件。

  3. 在配置目录中,创建一个名为 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

    从 MySQL 8.0.29 开始,您可以指定多个备用服务器(最多 64 个)。如果你这样做, keyring_okv插件会迭代它们直到它可以建立连接,如果不能则失败。要添加额外的备用服务器,请编辑该 文件以将服务器的 IP 地址和端口号指定为变量okvclient.ora值中的逗号分隔列表 。STANDBY_SERVER例如:

    STANDBY_SERVER=host_ip:port_num,host_ip:port_num,host_ip:port_num,host_ip:port_num

    确保备用服务器列表保持简短、准确和最新,并删除不再有效的服务器。每次连接尝试都有 20 秒的等待时间,因此一长串无效服务器的存在会显着影响 keyring_okv插件的连接时间,从而影响服务器启动时间。

  4. 以具有证书颁发机构访问凭据的管理员身份连接到 KeySecure 管理控制台。

  5. 导航到安全 >> 本地 CA 并创建本地证书颁发机构 (CA)。

  6. 转到受信任的 CA 列表。选择默认并单击属性。然后为受信任的证书颁发机构列表选择编辑并添加刚刚创建的 CA。

  7. 下载 CA 并将其 ssl作为名为 CA.pem.

  8. 导航到安全 >> 证书请求并创建证书。然后您可以下载包含证书 PEM 文件的压缩 tar文件。

  9. 从下载的文件中提取 PEM 文件。例如,如果文件名为 csr_w_pk_pkcs8.gz,请使用以下命令解压缩并解压缩它:

    tar zxvf csr_w_pk_pkcs8.gz

    提取操作产生两个文件: certificate_request.pemprivate_key_pkcs8.pem.

  10. 使用此openssl命令解密私钥并创建名为的文件 key.pem

    openssl pkcs8 -in private_key_pkcs8.pem -out key.pem
  11. key.pem文件复制到 ssl目录中。

  12. 将证书请求复制 certificate_request.pem到剪贴板中。

  13. 导航到安全 >> 本地 CA。选择您之前创建的同一 CA(您下载以创建CA.pem文件的 CA),然后单击 Sign Request。从剪贴板粘贴证书请求,选择客户端的证书用途(keyring 是 KeySecure 的客户端),然后单击 Sign Request。结果是在新页面中使用选定的 CA 签名的证书。

  14. 将签名证书复制到剪贴板,然后将剪贴板内容保存为目录中命名 cert.pemssl文件。

  15. (可选)如果您希望使用密码保护密钥文件,请使用 密码保护 keyring_okv 密钥文件中的说明。

完成上述步骤后,重启MySQL服务器。它加载keyring_okv插件并 keyring_okv使用其配置目录中的文件与 KeySecure 进行通信。

为 Townsend Alliance Key Manager 配置 keyring_okv

Townsend Alliance Key Manager 使用 KMIP 协议。密钥环插件可以使用 Alliance Key Manager 作为密钥环存储的 keyring_okvKMIP 后端。有关其他信息,请参阅 MySQL 的联盟密钥管理器

为 Entrust KeyControl 配置 keyring_okv

Entrust KeyControl 使用 KMIP 协议。密钥环 keyring_okv插件可以使用 Entrust KeyControl 作为密钥环存储的 KMIP 后端。有关其他信息,请参阅 Oracle MySQL 和 Entrust KeyControl 与 nShield HSM 集成指南

密码保护 keyring_okv 密钥文件

您可以选择使用密码保护密钥文件,并提供包含密码的文件以使密钥文件能够被解密。为此,将位置更改为 ssl目录并执行以下步骤:

  1. 加密key.pem密钥文件。例如,使用这样的命令,并在提示符处输入加密密码:

    $> openssl rsa -des3 -in key.pem -out key.pem.new
    Enter PEM pass phrase:
    Verifying - Enter PEM pass phrase:
  2. password.txt将加密密码保存在 目录中 命名的单行文本文件中ssl

  3. 使用以下命令验证是否可以解密加密的密钥文件。解密后的文件应该显示在控制台上:

    $> openssl rsa -in key.pem.new -passin file:password.txt
  4. 删除原始key.pem文件并重命名key.pem.newkey.pem.

  5. 根据需要更改新 key.pem文件和 password.txt文件的所有权和访问模式,以确保它们与ssl目录中的其他文件具有相同的限制。