#### 6.4.4.8 使用密钥环\_okv KMIP 插件

[](<>)[](<>)

笔记

这`密钥环_okv`plugin 是商业产品 MySQL 企业版中包含的扩展。要了解有关商业产品的更多信息，请参阅<https://www.mysql.com/products/>.

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

-   Oracle 密钥库

-   金雅拓 SafeNet KeySecure 设备

-   汤森联盟关键经理

-   委托密钥控制

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

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

-   SQL接口：在SQL语句中，调用中描述的函数[第 6.4.4.14 节，“通用密钥环密钥管理功能”](keyring-functions-general-purpose.html).

-   C接口：在C语言代码中，调用描述的keyring服务函数[第 5.6.9.2 节，“密钥环服务”](keyring-service.html).

    示例（使用 SQL 接口）：


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

有关允许的键值特征的信息`密钥环_okv`, [第 6.4.4.12 节，“支持的密钥环密钥类型和长度”](keyring-key-types.html).

安装`密钥环_okv`, 使用中的一般说明[第 6.4.4.3 节，“密钥环插件安装”](keyring-plugin-installation.html)，以及特定于的配置信息`密钥环_okv`在这里找到。

-   [通用钥匙圈\_okv 配置](keyring-okv-plugin.html#keyring-okv-configuration)

-   [配置密钥环\_Oracle Key Vault 的 okv](keyring-okv-plugin.html#keyring-okv-oracle-key-vault)

-   [配置密钥环\_金雅拓 SafeNet KeySecure 设备的 okv](keyring-okv-plugin.html#keyring-okv-keysecure)

-   [配置密钥环\_Townsend 联盟密钥管理器的 okv](keyring-okv-plugin.html#keyring-okv-alliance)

-   [配置密钥环\_okv for Entrust KeyControl](keyring-okv-plugin.html#keyring-okv-entrust-keycontrol)

-   [密码保护密钥环\_okv 密钥文件](keyring-okv-plugin.html#keyring-okv-encrypt-key-file)

##### 通用钥匙圈\_okv 配置

[](<>)

无论使用哪个 KMIP 后端`密钥环_okv`插件用于密钥环存储，[`keyring_okv_conf_dir`](keyring-system-variables.html#sysvar_keyring_okv_conf_dir)系统变量配置使用的目录的位置`密钥环_okv`为其支持文件。默认值为空，因此您必须将变量设置为命名正确配置的目录，然后插件才能与 KMIP 后端通信。除非你这样做，`密钥环_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`](keyring-system-variables.html#sysvar_keyring_okv_conf_dir)变量必须命名一个包含以下项目的目录：

-   `okvclient.ora`：包含 KMIP 后端详细信息的文件`密钥环_okv`沟通。

-   `ssl`：包含与 KMIP 后端建立安全连接所需的证书和密钥文件的目录：`CA.pem`,`证书.pem`， 和`密钥文件`.如果密钥文件受密码保护，则`ssl`目录可以包含一个名为`密码.txt`包含解密密钥文件所需的密码。

    这俩`okvclient.ora`文件和`ssl`需要证书和密钥文件的目录`密钥环_okv`正常工作。使用这些文件填充配置目录的过程取决于使用的 KMIP 后端`密钥环_okv`，如其他地方所述。

    使用的配置目录`密钥环_okv`因为它的支持文件的位置应该有一个限制模式，并且只能由用于运行 MySQL 服务器的帐户访问。例如，在 Unix 和类 Unix 系统上，使用`/usr/local/mysql/mysql-keyring-okv`目录，以下命令（执行为`根`) 创建目录并设置其模式和所有权：


```
cd /usr/local/mysql
mkdir mysql-keyring-okv
chmod 750 mysql-keyring-okv
chown mysql mysql-keyring-okv
chgrp mysql mysql-keyring-okv
```

要在服务器启动过程中可用，`密钥环_okv`必须使用[`--early-plugin-load`](server-options.html#option_mysqld_early-plugin-load)选项。另外，设置[`keyring_okv_conf_dir`](keyring-system-variables.html#sysvar_keyring_okv_conf_dir)系统变量告诉`密钥环_okv`在哪里可以找到它的配置目录。例如，在服务器中使用这些行`我的.cnf`文件，调整`。所以`必要时为您的平台添加后缀和目录位置：

```
[mysqld]
early-plugin-load=keyring_okv.so
keyring_okv_conf_dir=/usr/local/mysql/mysql-keyring-okv
```

有关更多信息[`keyring_okv_conf_dir`](keyring-system-variables.html#sysvar_keyring_okv_conf_dir)， 看[第 6.4.4.18 节，“密钥环系统变量”](keyring-system-variables.html).

##### 配置密钥环\_Oracle Key Vault 的 okv

[](<>)[](<>)

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

-   [Oracle Key Vault 站点](http://www.oracle.com/technetwork/database/options/key-management/overview/index.html)

-   [Oracle Key Vault 文档](http://www.oracle.com/technetwork/database/options/key-management/documentation/index.html)

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

    以下过程简要总结了设置过程`密钥环_okv`与 Oracle Key Vault 一起使用：

1.  创建配置目录`密钥环_okv`要使用的插件。

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

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

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

    使用以下过程进行配置`密钥环_okv`和 Oracle Key Vault 一起工作。此描述仅总结如何与 Oracle Key Vault 交互。有关详细信息，请访问[Oracle 密钥库](http://www.oracle.com/technetwork/database/options/key-management/overview/index.html)站点并查阅 Oracle Key Vault 管理员指南。

5.  创建包含 Oracle Key Vault 支持文件的配置目录，并确保[`钥匙圈`](keyring-system-variables.html#sysvar_keyring_okv_conf_dir)系统变量设置为命名该目录（有关详细信息，请参阅[通用钥匙圈\_okv配置](keyring-okv-plugin.html#keyring-okv-configuration)).

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

7.  选择Endpoints选项卡以进入Endpoints页面。在端点页面上，单击添加。

8.  提供所需的端点信息，然后单击“注册”。端点类型应为其他。成功注册将生成注册令牌。

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

10. 再次连接到Oracle Key Vault服务器，这次无需登录。使用端点注册令牌注册并请求`okvclient。罐子`软件下载。将此文件保存到系统中。

11. 安装`okvclient。罐子`使用以下命令创建文件（必须使用JDK 1.4或更高版本）：

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

    下面的目录名`-d`选项是安装解压缩文件的位置。这个`-五`选项（如果给定）会导致生成日志信息，如果命令失败，这些信息可能会有用。

    当命令要求输入Oracle Key Vault端点密码时，请不要提供密码。而是按Enter键。（结果是，当端点连接到Oracle Key Vault时，不需要密码。）

12. 前面的命令生成`okvclient。奥拉`文件，该文件应位于`-d`在前面的选项中**java-jar**命令：

    ```
    install_dir/conf/okvclient.ora
    ```

    文件内容包括以下行：

    ```
    SERVER=host_ip:port_num
    STANDBY_SERVER=host_ip:port_num
    ```

    这`密钥环_okv`插件尝试与运行在由`服务器`变量并回退到`STANDBY_SERVER`如果失败：

    -   为了`服务器`变量，在`okvclient.ora`文件是强制性的。

    -   为了`STANDBY_SERVER`变量，在`okvclient.ora`文件是可选的。

13. 转到 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 服务器（其中没有任何密钥的服务器），输出如下所示，以指示 Vault 中没有密钥：

    ```
    no objects found
    ```

14. 使用此命令提取`ssl`包含 SSL 材料的目录`okvclient.jar`文件：

    ```
    jar xf okvclient.jar ssl
    ```

15. 复制 Oracle Key Vault 支持文件（`okvclient.ora`文件和`ssl`目录）进入配置目录。

16. （可选）如果您希望对密钥文件进行密码保护，请使用中的说明[密码保护密钥环\_okv 密钥文件](keyring-okv-plugin.html#keyring-okv-encrypt-key-file).

    完成上述步骤后，重启 MySQL 服务器。它加载`密钥环_okv`插件和`密钥环_okv`使用其配置目录中的文件与 Oracle Key Vault 通信。

##### 配置密钥环\_金雅拓 SafeNet KeySecure 设备的 okv

[](<>)[](<>)[](<>)

Gemalto SafeNet KeySecure Appliance 使用 KMIP 协议（​​版本 1.1 或 1.2）。这`密钥环_okv`密钥环插件（支持 KMIP 1.1）可以使用 KeySecure 作为其 KMIP 后端来存储密钥环。

使用以下过程进行配置`密钥环_okv`和 KeySecure 一起工作。该描述仅总结了如何与 KeySecure 交互。有关详细信息，请参阅“添加 KMIP 服务器”一节[KeySecure 用户指南](https://www2.gemalto.com/aws-marketplace/usage/vks/uploadedFiles/Support_and_Downloads/AWS/007-012362-001-keysecure-appliance-user-guide-v7.1.0.pdf).

1.  创建包含 KeySecure 支持文件的配置目录，并确保[`keyring_okv_conf_dir`](keyring-system-variables.html#sysvar_keyring_okv_conf_dir)系统变量设置为该目录的名称（有关详细信息，请参阅[通用钥匙圈\_okv 配置](keyring-okv-plugin.html#keyring-okv-configuration)）。

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

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

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

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

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

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

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

9.  从下载的文件中提取 PEM 文件。例如，如果文件名是`csr_w_pk_pkcs8.gz`, 使用以下命令解压并解压：

    ```
    tar zxvf csr_w_pk_pkcs8.gz
    ```

    提取操作产生两个文件：`证书请求.pem`和`private_key_pkcs8.pem`.

10. 用这个**openssl**命令解密私钥并创建一个名为`密钥文件`：

    ```
    openssl pkcs8 -in private_key_pkcs8.pem -out key.pem
    ```

11. 复制`密钥文件`文件到`ssl`目录。

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

13. 导航到安全>>本地 CA。选择您之前创建的相同 CA（您下载的用于创建`CA.pem`文件），然后单击签名请求。从剪贴板粘贴证书请求，选择客户端的证书用途（密钥环是 KeySecure 的客户端），然后单击签名请求。结果是在新页面中使用所选 CA 签署的证书。

14. 将签名证书复制到剪贴板，然后将剪贴板内容保存为名为`证书.pem`在里面`ssl`目录。

15. （可选）如果您希望对密钥文件进行密码保护，请使用中的说明[密码保护密钥环\_okv 密钥文件](keyring-okv-plugin.html#keyring-okv-encrypt-key-file).

    完成上述步骤后，重启 MySQL 服务器。它加载`密钥环_okv`插件和`密钥环_okv`使用其配置目录中的文件与 KeySecure 进行通信。

##### 配置密钥环\_Townsend 联盟密钥管理器的 okv

[](<>)[](<>)[](<>)

Townsend Alliance Key Manager 使用 KMIP 协议。这`密钥环_okv`密钥环插件可以使用 Alliance Key Manager 作为其 KMIP 后端来存储密钥环。有关其他信息，请参阅[MySQL 联盟密钥管理器](https://www.townsendsecurity.com/product/encryption-key-management-mysql).

##### 配置密钥环\_okv for Entrust KeyControl

[](<>)[](<>)[](<>)

Entrust KeyControl 使用 KMIP 协议。这`密钥环_okv`密钥环插件可以使用 Entrust KeyControl 作为其 KMIP 后端来存储密钥环。有关其他信息，请参阅[Oracle MySQL 和 Entrust KeyControl 与 nShield HSM 集成指南](https://www.entrust.com/-/media/documentation/integration-guides/oracle-mysql-enterprise-keycontrol-nshield-ig.pdf).

##### 密码保护密钥环\_okv 密钥文件

您可以选择使用密码保护密钥文件，并提供包含密码的文件以启用密钥文件的解密。为此，请将位置更改为`ssl`目录并执行以下步骤：

1.  加密`密钥文件`密钥文件。例如，使用这样的命令，并在提示符处输入加密密码：

    ```
    $> openssl rsa -des3 -in key.pem -out key.pem.new
    Enter PEM pass phrase:
    Verifying - Enter PEM pass phrase:
    ```

2.  将加密密码保存在名为`密码.txt`在里面`ssl`目录。

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

    ```
    $> openssl rsa -in key.pem.new -passin file:password.txt
    ```

4.  删除原件`密钥文件`文件和重命名`密钥.pem.new`到`密钥文件`.

5.  改变新的所有权和访问方式`密钥文件`文件和`密码.txt`文件，以确保它们具有与其他文件相同的限制`ssl`目录。
