文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  使用 keyring_okv KMIP 插件

8.4.4.6 使用 keyring_okv KMIP 插件

注意

keyring_okv 插件是 MySQL 企业版(一款商业产品)中包含的扩展。要了解有关商业产品的更多信息,请参阅 https://www.mysqlserver.cn/products/

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

  • Oracle Key Vault

  • Gemalto SafeNet KeySecure Appliance

  • Townsend Alliance Key Manager

  • Entrust KeyControl

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

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

示例(使用 SQL 接口)

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

有关 keyring_okv 允许的密钥值特征的信息,请参阅 第 8.4.4.10 节“支持的密钥环密钥类型和长度”

要安装 keyring_okv,请使用 第 8.4.4.3 节“密钥环插件安装” 中的一般说明,以及此处提供的特定于 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.pemcert.pemkey.pem。如果密钥文件受密码保护,则 ssl 目录可以包含一个名为 password.txt 的单行文本文件,其中包含解密密钥文件所需的密码。

要使 keyring_okv 正常工作,okvclient.ora 文件和包含证书和密钥文件的 ssl 目录都是必需的。用于使用这些文件填充配置目录的过程取决于与 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 的其他信息,请参阅第 8.4.4.16 节“密钥环系统变量”

为 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. 安装客户端软件以填充包含 Oracle Key Vault 支持文件的 keyring_okv 配置目录。

使用以下过程配置 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. 选择“端点”选项卡以进入“端点”页面。在“端点”页面上,单击“添加”。

  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 时不需要密码。)

    前面的命令会生成一个 okvclient.ora 文件,该文件应该位于前面 java -jar 命令中由 -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

    注意

    如果现有文件不是此格式,请使用上例中显示的行创建一个新文件。此外,在运行 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 插件的连接时间,从而影响服务器启动时间。

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

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

  11. (可选)如果您希望使用密码保护密钥文件,请按照使用密码保护 keyring_okv 密钥文件中的说明进行操作。

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

为 Gemalto SafeNet KeySecure Appliance 配置 keyring_okv

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

使用以下过程配置 keyring_okv 和 KeySecure 以便协同工作。此说明仅概述了如何与 KeySecure 进行交互。有关详细信息,请查阅 《KeySecure 用户指南》中名为“添加 KMIP 服务器”的部分。

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

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

    您可以指定多个备用服务器(最多 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 插件的连接时间,从而影响服务器启动时间。

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

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

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

  7. 下载 CA 并将其作为名为 CA.pem 的文件保存在 ssl 目录中。

  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),然后单击“签名请求”。从剪贴板粘贴证书请求,选择“客户端”的证书用途(密钥环是 KeySecure 的客户端),然后单击“签名请求”。结果是在新页面中使用所选 CA 签署的证书。

  14. 将已签名的证书复制到剪贴板,然后将剪贴板内容另存为名为 cert.pem 的文件,并将其保存在 ssl 目录中。

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

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

为 Townsend Alliance Key Manager 配置 keyring_okv

Townsend Alliance Key Manager 使用 KMIP 协议。 keyring_okv 密钥环插件可以使用 Alliance Key Manager 作为其用于密钥环存储的 KMIP 后端。有关其他信息,请参阅 适用于 MySQL 的 Alliance Key Manager

为 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. 将加密密码保存在 ssl 目录中名为 password.txt 的单行文本文件中。

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

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

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