使用keyring_okv插件(KMIP)
注意该
keyring_okv
插件是商业产品MySQL企业版中的扩展。要了解有关商业产品的更多信息,请参见https://www.mysql.com/products/。
密钥管理互操作性协议(KMIP)支持在密钥管理服务器及其客户端之间进行加密密钥通信。在keyring_okv
钥匙圈插件使用KMIP 1.1协议作为一个KMIP后端的一个客户端安全地通信。密钥环材料仅由后端生成,而不由生成keyring_okv
。该插件可与以下KMIP兼容产品一起使用:
- Oracle Key保管库
- 金雅拓SafeNet KeySecure设备
该keyring_okv
插件支持包含标准MySQL Keyring服务接口的功能。这些功能执行的密钥环操作可从两个级别访问:
- SQL接口:在SQL语句中,调用“通用密钥环密钥管理功能”中所述的用户定义函数(UDF)。
- C接口:在C语言代码中,调用“密钥环服务”中所述的密钥环服务功能。
示例(使用UDF):
SELECT keyring_key_generate('MyKey', 'AES', 32);SELECT keyring_key_remove('MyKey');
有关密钥类型信息允许通过keyring_okv
,第6.4.4.8,“支持的重点匙扣类型和长度”。
要安装keyring_okv
插件,请使用“密钥环插件安装”中的常规密钥环安装说明,以及keyring_okv
此处的特定配置信息。
- 常规keyring_okv配置
- 为Oracle Key Vault配置keyring_okv
- 为金雅拓SafeNet KeySecure设备配置keyring_okv
- 密码保护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.or
:一个文件,其中包含keyring_okv
将与之通信的KMIP后端的详细信息。ssl
:包含证书,并建立与KMIP后端的安全连接所需的密钥文件的目录CA.pem
,cert.pem
和key.pem
。如果密钥文件受密码保护,则ssl
目录可以包含一个单行文本文件password.txt
,该文件名为,包含解密密钥文件所需的密码。
这两个okvclient.or
文件和ssl
目录与证书和密钥文件所需的keyring_okv
工作正常。用这些文件填充配置目录的过程取决于与一起使用的KMIP后端keyring_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
,请参见“密钥环系统变量”。
为Oracle Key Vault配置keyring_okv
此处的讨论假定您熟悉Oracle Key Vault。一些相关的信息来源:
- Oracle Key Vault网站
- Oracle Key Vault文档
在Oracle Key Vault术语中,使用Oracle Key Vault存储和检索安全性对象的客户端称为端点。要与Oracle Key Vault通信,必须注册为端点并通过下载和安装端点支持文件进行注册。
以下过程简要总结了keyring_okv
用于Oracle Key Vault 的设置过程:
- 创建
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.or
文件,该文件应该-d
位于前面的java -jar命令中的选项所命名的目录下的此位置:install_dir/conf/okvclient.or
文件内容包括如下所示的行:
SERVER=host_ip:port_num STANDBY_SERVER=host_ip:port_num
在
keyring_okv
与服务器的命名在主机上运行的通信插件试图SERVER
变回退到STANDBY_SERVER
如果失败:- 对于
SERVER
变量,okvclient.or
必须在文件中进行设置。 - 对于
STANDBY_SERVER
变量,okvclient.or
文件中的设置是可选的。
- 对于
转到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
使用此命令
ssl
从okvclient.jar
文件中提取包含SSL资料的目录:jar xf okvclient.jar ssl
- 将Oracle Key Vault支持文件(
okvclient.or
文件和ssl
目录)复制到配置目录中。 - (可选)如果要用密码保护密钥文件,请使用“密码保护keyring_okv密钥文件”中的说明。
完成上述步骤后,重新启动MySQL服务器。它加载keyring_okv
插件并keyring_okv
使用其配置目录中的文件与Oracle Key Vault通信。
为金雅拓SafeNet KeySecure设备配置keyring_okv
金雅拓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
系统变量设置为该目录的名称(有关详细信息,请参见General keyring_okv Configuration)。 - 在配置目录中,创建一个名为
ssl
用于存储所需的SSL证书和密钥文件的子目录。 在配置目录中,创建一个名为的文件
okvclient.or
。它应具有以下格式:SERVER=host_ip:port_num STANDBY_SERVER=host_ip:port_num
例如,如果KeySecure在主机198.51.100.20上运行并在端口9002上侦听,则
okvclient.or
文件如下所示:SERVER=198.51.100.20:9002 STANDBY_SERVER=198.51.100.20:9002
- 以具有用于证书颁发机构访问权限的凭据的管理员身份连接到KeySecure管理控制台。
- 导航到“安全性>>本地CA”,然后创建一个本地证书颁发机构(CA)。
- 转到受信任的CA列表。选择默认,然后单击属性。然后,选择“受信任的证书颁发机构列表的编辑”并添加刚刚创建的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 ),然后单击“签署请求”。从剪贴板粘贴证书申请,选择客户端的证书用途(密钥环是KeySecure的客户端),然后单击“签名申请”。结果是在新页面中与所选CA签署的证书。 - 将签名的证书复制到剪贴板,然后将剪贴板内容另存为目录中命名
cert.pem
的ssl
文件。 - (可选)如果要用密码保护密钥文件,请使用“密码保护keyring_okv密钥文件”中的说明。
完成上述步骤后,重新启动MySQL服务器。它加载keyring_okv
插件并keyring_okv
使用其配置目录中的文件与KeySecure通信。
密码保护keyring_okv密钥文件
您可以选择使用密码保护密钥文件,并提供一个包含密码的文件以使密钥文件能够被解密。这样做,将位置更改为ssl
目录并执行以下步骤:
加密
key.pem
密钥文件。例如,使用以下命令,然后在提示下输入加密密码:shell>
openssl rsa -des3 -in key.pem -out key.pem.new Enter PEM pass phrase: Verifying - Enter PEM pass phrase:- 将加密密码保存
password.txt
在ssl
目录中命名的单行文本文件中。 验证可以使用以下命令对加密的密钥文件进行解密。解密后的文件应显示在控制台上:
shell>
openssl rsa -in key.pem.new -passin file:password.txt- 删除原始
key.pem
文件,然后重命名key.pem.new
为key.pem
。 - 根据需要更改新
key.pem
文件和password.txt
文件的所有权和访问方式,以确保它们具有与ssl
目录中其他文件相同的限制。