B 将 OKM 与高级安全透明数据加密 (Transparent Data Encryption, TDE) 结合使用

本附录介绍将 OKM 与透明数据加密 (Transparent Data Encryption, TDE) 结合使用,来管理敏感数据库信息的加密或解密。通过该解决方案,您可以使用 Oracle StorageTek 磁带机中所用的加密技术管理 Oracle 数据库的加密密钥。

透明数据加密是 Oracle Database 11gR2 的一项功能,为以下几项提供数据库加密和解密服务:

  • Oracle 数据库产品

  • Oracle Real Application Clusters (Oracle RAC)

  • Oracle Data Guard

  • Oracle Exadata 数据库计算机

  • Oracle Recovery Manager (RMAN)

  • Oracle 数据泵

本附录假设您已经熟悉 TDE。请参阅位于以下 URL 的文档《Oracle Advanced Security Transparent Data Encryption Best Practices》:

http://www.oracle.com/us/products/database/twp-transparent-data-encryption-bes-130696.pdf

透明数据加密 (Transparent Data Encryption, TDE) 概述

图 B-1 显示了一个 OKM 群集,群集中的 Oracle 数据库采用了透明数据加密 (Transparent Data Encryption, TDE)。有关 OKM 群集基本组件的更多信息,请参见章 1, "介绍"

图 B-1 采用 TDE 的 OKM 群集

周围文本对 图 B-1 进行了说明。

TDE 使用两层密钥方法提供加密服务,实现 TDE 列加密和 TDE 表空间加密。主加密密钥用在第一层,可对存储在数据库中的第二层表或表空间数据加密密钥进行加密。

TDE 将主加密密钥存储在外部安全模块(Oracle Wallet 或 HSM)中。这是建议的安全做法,这种做法对于抵御各种威胁而维持最高级别的安全性至关重要。建议的方法是将 OKM 用于 TDE 主加密密钥的安全存储。

如果将 TDE 配置为使用 OKM,OKM 会创建并安全保护 AES256 主加密密钥。OKM 通过复制(在群集中创建多个副本)和备份 OKM 本身来保护密钥。

有关灾难恢复规划的信息,请参阅《OKM Disaster Recovery Guide》。

OKM 的 PKCS#11 提供程序

PKCS#11 提供程序可用于 Oracle Solaris 和 Oracle Linux,经证实,可将 TDE 与 OKM 连接起来。该提供程序称为 "pkcs11_kms"。TDE 可配置为通过对硬件安全模块 (Hardware Security Module, HSM) 的内置支持利用 pkcs11_kms 提供程序。

pkcs11_kms 提供程序为了密钥创建和密钥检索操作而与 OKM 进行交互。PKCS#11 使用者应用程序(例如 TDE)可使用 pkcs11_kms 提供程序获取用于加密和解密功能的密钥。这些应用程序使用它们定义的标签标识密钥对象。TDE 在创建主密钥时生成该标签。pkcs11_kms 提供程序将该标签传递给 OKM,OKM 将其作为数据单元的元数据进行维护。在 OKM 中,密钥与数据单元关联,对于 pkcs11_kms 提供程序而言,这种关系始终是 1:1。每次创建新主密钥时,都会创建带有密钥标签的数据单元以及相应的密钥对象。

有关更多信息,请参见"在 OKM 中找到 TDE 主密钥"

使用 OKM 进行 TDE 验证

与 OKM 交互的任何实体都要经过验证,无论是登录系统的管理用户、检索密钥材料的磁带机,还是 Oracle TDE 等 PKCS#11 使用者。

TDE 通过配置为利用 pkcs11_kms 提供程序的特定令牌与 OKM 进行验证。该令牌将基于密码的验证和 X.509 证书用于会话中各方(尤其是 Oracle 数据库实例和 OKM 群集节点)的相互验证。您必须将 TDE 配置为将这些凭证正确地传递给 PKCS#11 令牌。

有关配置说明,请参阅本附录开头引用的文档《Oracle Advanced Security Transparent Data Encryption Best Practices》。

管理验证凭证

通过 OKM,您可以使用 pkcs11_kms 提供程序管理代理的验证凭证。您可以重置代理口令短语,也可以根据策略规定启用、禁用或删除代理。

如果检测到安全漏洞,您可以禁用特定代理以拒绝密钥检索,同时允许为其他应用程序或设备提供服务的其他代理维持访问。

如果您重置代理口令短语,请删除 pkcs11_kms 提供程序存储其插槽配置的目录中的配置文件目录(例如,由 KMSTOKEN_DIR 目录标识的位置)。

负载平衡和故障转移

pkcs11_kms 提供程序通过使用 OKM 群集服务、负载平衡器和群集故障转移逻辑来感知 OKM 群集。pkcs11_kms 提供程序通过定期发出群集搜索操作来透明地维持 OKM 群集的客户端感知。网络更改和 OKM 群集或 KMA 可用性的更改由代理代表 pkcs11_kms 提供程序和 TDE 来处理。PKCS#11 密钥生成和密钥检索操作在 OKM 群集中的 KMA 之间实现负载平衡。

为了进一步优化密钥检索性能,可将代理配置为通过使用 OKM 站点与 KMA 关联。该功能允许根据网络拓扑定义站点。通常,与 WAN 中的成员 KMA 和代理相比,站点中的 KMA 和代理网络延迟较低。

当某个网络段或 KMA 不可用时,代理中的故障转移逻辑会选择其他 KMA 来完成操作。TDE 无法感知任何故障转移,所以密钥管理操作非常可靠。故障转移优先选择与代理在同一个站点内的 KMA。

您可以使用 kmscfg(1M) 实用程序调整代理的搜索频率和故障转移属性。有关更多信息,请参见 kmscfg 手册页。

规划注意事项

下面讨论多个规划主题:

  • Oracle 数据库注意事项

  • OKM 性能和可用性注意事项

  • 灾难恢复规划

  • 网络规划

  • 密钥管理规划

Oracle 数据库注意事项

OKM 与以下任何 Oracle 数据库配置都兼容:

  • 单实例,Oracle RAC 单节点

  • Oracle 数据库高可用性体系结构

    • Oracle RAC

      Oracle 数据库与 Oracle Real Application Clusters (Oracle RAC) 已针对 OKM 进行了认证。Oracle RAC 系统的每个节点都需要一个配置的 pkcs11_kms 提供程序以供 TDE 使用。所有节点必须共享同一个用于验证的 OKM 代理 ID。对于 Oracle RAC,网络拓扑利用公共和专用网络。用于 Oracle RAC 节点对节点通信的专用网络可与 OKM 服务网络共享,以便更好地隔离密钥检索流量。根据该专用网络的配置方式,这可能会阻止代理故障转移到专用网络以外的 KMA,例如远程站点中的 KMA。

      有关 Oracle RAC 和 pkcs11_kms 提供程序配置文件的共享存储要求,请参见"将 OKM 和 TDE 集成"

    • Oracle RAC 扩展群集

      在这种配置中,为了最大限度地缩短检索时间,OKM 群集中的 KMA 必须与 Oracle RAC 节点在网络中的同一位置。

    • Oracle Exadata 数据库计算机

      请参见以上"Oracle RAC"

  • Oracle Data Guard

    所有辅助数据库访问主数据库使用的同一个 OKM 群集。

  • 多个数据库实例

    在主机上运行多个独立的数据库实例时,必须为每个实例配置 PKCS#11 令牌。这等同于为每个数据库实例创建 OKM 代理,并通过令牌向 OKM 验证代理。可使用 kmscfg 工具完成该任务。

    在同一个 O/S 用户下运行多个数据库实例但使用不同的 OKM 代理时,每次调用 kmscfg 实用程序时,都必须将 KMSTOKEN_DIR 环境变量设置为不同的位置。有关 kmscfg 实用程序的更多信息,请参见"为 TDE 配置 OKM"

    有关在同一个主机上运行多个数据库的更多信息,请参阅本附录开头引用的文档《Oracle Advanced Security Transparent Data Encryption Best Practices》。

  • Oracle RMAN

  • Oracle 数据泵

OKM 性能和可用性注意事项

通过 pkcs11_kms 令牌实现的 TDE 密钥检索通常在每次访问 KMA 时需要 100-200 毫秒。发生故障转移时,响应时间是以上时间乘以故障转移尝试次数。

OKM 备份和密钥传输操作是资源密集型活动,可能会影响 OKM 数据库性能。请仔细规划,确定在何时何地执行 OKM 备份。

由于 OKM 备份是群集范围的操作,因此可在不为 Oracle 数据库实例提供服务的 KMA 上执行。同样,密钥传输操作也是群集范围的操作,可在任何 KMA 上执行。因此,建议您选择不为繁忙的 Oracle 数据库实例提供服务的 KMA。

灾难恢复规划

有关 OKM 灾难恢复规划的详细信息,请参阅《OKM Disaster Recovery Guide》以及 Oracle 数据库出版物。

灾难恢复规划决定影响网络规划的运用。pkcs11 提供程序的配置目录是灾难恢复规划的新注意事项。考虑该存储区域的恢复情形,以避免需要重新配置 pkcs11_kms 令牌,尤其是在 Oracle RAC 的节点之间共享令牌时。

网络规划

必须按照 Oracle 数据库服务器和企业的灾难恢复策略规划 OKM 群集配置。OKM 网络选项非常灵活,包括 OKM 管理和服务网络使用的多宿主接口。有关更多信息,请参阅《OKM System Assurance Guide》。

密钥管理规划

密钥管理规划必须涵盖企业的密钥生命周期和安全策略。这些注意事项自然会引发关于数据保留的讨论。

密钥策略注意事项

所有 TDE 主密钥都是 OKM 生成的 AES 256 位密钥。KMA 可能包含 Sun Crypto Accelerator 6000 PCIe 卡-FIPS 140-2 3 级认证的 HSM。当 KMA 包含该硬件安全模块时,其密钥将由 HSM 创建。否则,加密操作将利用 Solaris Crypto 框架的软件令牌提供程序。有关更多信息,请参见"密钥策略"

密钥生命周期

就密钥策略规划决定而言,密钥生命周期是主要配置项目。密钥生命周期操作阶段的期间应该根据数据保留需求以及 TDE 主密钥重新加密的频率进行选择。有关更多信息,请参见"密钥生命周期"

注:

与 OKM 中的模式加密对话框一样,TDE 的 DDL 也支持主密钥的各种密钥大小规范。只有 AES 256 位密钥可与 OKM 结合使用。
密钥策略加密期间

密钥策略加密期间定义密钥在生命周期内的保护和处理(加密和解密)状态中使用的时间长度。该期间应该对应于在主密钥应重新加密之前使用它的时间段(例如,对于 PCI 最长为一年)。

密钥策略密码有效期

密钥策略密码有效期是在密钥生命周期的仅处理(仅解密)状态期间内为使用主密钥解密数据分配的剩余时间。该期间的长度应该符合 TDE 主密钥保护的数据的数据保留要求。通常,该值是对应于企业数据保留策略的年数(例如,美国税务记录的保留期间是七年)。

对于 TDE 而言,新密钥的生成速率应该不是担心的问题,因为重新加密操作可能并不频繁。但是,如果这一点成为担心的问题,则要考虑延长密钥策略中的加密期间,并减小重新加密的频率。您还可以增大 OKM 密钥池大小配置参数,以指示 KMA 维护较大的可用密钥池。

可根据需要定义多项密钥策略,以便与不同类型的数据库结合使用。

通过密钥组进行密钥访问控制

当多个数据库实例或多个代理出于不同目的访问 OKM 群集时,可能有必要控制对 OKM 管理的密钥的访问。

所有 OKM 代理都分配到至少一个密钥组(需要默认的密钥组分配),授予它们访问这些组中密钥的权限。pkcs11_kms 提供程序的代理只会在代理的默认密钥组中创建密钥。

当不需要在数据库实例或主机之间共享主密钥时,考虑使用多个密钥组。例如,可将一个密钥组用于生产数据库实例,将另一个密钥组用于开发/测试数据库,以便确保隔离。如果测试数据库密钥组中的代理尝试将主密钥用于生产数据库,则会被 OKM 阻止。这种尝试还会在 OKM 审计日志中进行标记,可能表明出现了会中断生产数据库的配置错误。

TDE 还通过密钥标签命名约定对主密钥进行隔离。在 PKCS#11 规范中,密钥标签不必唯一。但是,无论密钥组为何,OKM 都会强制采用唯一的标签,以便标签名称空间的范围对于 OKM 群集是全局性的。如果不同数据库实例的不同主密钥之间发生标签冲突,始终返回创建的第一个标签。如果任何代理尝试访问的密钥共享属于另一个密钥组的相同标签,都会遭到 OKM 拒绝。在重新加密操作期间会检测到该问题,解决方法是重新加密,直到再生成一个不冲突的标签。

密钥和数据销毁注意事项

要根据数据保留要求销毁数据,可以先销毁 TDE 主密钥。这些密钥的销毁方式和时间是一个重要的规划项目。OKM 可做到这一点,还能跟踪 OKM 备份,其中包括这些密钥。OKM 备份的管理既是灾难恢复规划项目,又是密钥销毁规划项目。

将 OKM 和 TDE 集成

本部分介绍如何安装和配置 pkcs11_kms 和 OKM 群集以便与 TDE 结合使用。

系统要求

将 OKM 和 TDE 结合使用时,支持的最低版本如下所示:

Oracle Key Manager

以 Replication Schema 版本 13 运行的 Oracle Key Manager 2.4.1

GUI 和 CLI 支持的 OKM 管理平台在 OKM 产品发行说明中进行了介绍,其中包括 Oracle Solaris 和 Microsoft Windows 平台的特定注意事项。

pkcs11_kms

  • 带有 SRU 12 的 Oracle Solaris 11 Express

  • Oracle Solaris 11 pkcs11_kms,x86 或 SPARC,32 位或 64 位

  • Oracle Solaris 10 Update 10 pkcs11_kms 修补程序 147441-03(适用于 x86)或修补程序 147159-02(适用于 SPARC),32 位或 64 位

  • Oracle Enterprise Linux (OEL) 发行版 5.5

  • 在支持的 pkcs11_kms 平台上运行的 Oracle Database 11.2.0.2 和必需的修补程序 12626642

安装 OKM

OKM 群集安装过程在《OKM Installation Guide》中进行了介绍。通常,OKM 安装涉及与 Oracle 专业服务人员接洽,请其帮助进行规划、安装和配置服务选择。此外,建议您的安全团队参与规划过程。

建立正常运行的 OKM 群集后,请按照本附录配置部分中所述的 OKM 管理步骤进行操作。

安装 pkcs11_kms

您必须在 Oracle 数据库服务器上安装和配置 OKM 的 PKCS#11 提供程序 pkcs11_kms。为以下各个平台提供 pkcs11_kms 分发:

  • Oracle Solaris 11 或 Solaris 11 Express

  • Oracle Solaris 10 Update 10

  • Oracle Enterprise Linux

为 Oracle Solaris 11 或 Solaris 11 Express 安装 pkcs11_kms

执行以下步骤来安装 pkcs11_kms:

  1. 显示 pkcs_kms 软件包的版本:

    #> pkg info -r pkcs11_kms
    

    验证该命令的输出。

  2. 对于 Solaris 11,请输入以下命令:

    #> pkg install system/library/security/pkcs11_kms
    

    对于 Solaris 11 Express,请输入以下命令:

    #> pkg install system/library/security/crypto/pkcs11_kms 
    
  3. 将提供程序安装到 Solaris Crypto Framework 中。

    # cryptoadm install provider='/usr/lib/security/$ISA/pkcs11_kms.so.1'
    

    注:

    单引号很重要,请参见 cryptoadm(1M)。
  4. 输入以下命令序列来验证安装:

    # cryptoadm list -m -v \
    provider='/usr/lib/security/$ISA/pkcs11_kms.so.1'
    

    注:

    这样会显示消息:'no slots presented',直到 kmscfg 运行。

为 Oracle Solaris 10 Update 10 安装 pkcs11_kms

在 Solaris 10 Update 10 安装中,pkcs 分发作为 "SUNWpkcs11kms" 安装。

  • SPARC 系统需要 Solaris 修补程序 147159-03 或更高版本。

  • x86 系统需要 Solaris 修补程序 147441-03 或更高版本。

要下载 Solaris 修补程序,请访问以下 URL:

https://patchstatus.us.oracle.com/patchstatus/

执行以下步骤来安装 pkcs11_kms:

  1. 输入以下命令为硬件平台安装 pkcs11_kms 软件包:

    # pkgadd [-d path to parent dir of package] SUNWpkcs11kms
    
  2. 将提供程序安装到 Solaris Crypto Framework 中。

    # cryptoadm install provider='/usr/lib/security/$ISA/pkcs11_kms.so.1'
    

    注:

    单引号很重要,请参见 cryptoadm(1M)。

为 Oracle Enterprise Linux 安装 pkcs11_kms

在位于以下 URL 的 My Oracle Support 站点上,pkcs11_kms 作为“修补程序”13245560 分发:

http://www.myoraclesupport.com

登录并单击 Patches & Updates(补丁程序和更新程序)选项卡。然后,直接搜索该特定修补程序 ID,或者搜索 Oracle Key Manager 产品和 Oracle Key Manager 2.5 发行版。

pkcs11_kms 作为 RPM 软件包分发。使用 RPM 软件包管理器命令来安装该软件。

例如:

# rpm -i pkcs11kms-1.0.0-1.x86_64.rpm 

卸载 pkcs11_kms

以下命令可卸载 pkcs11_kms。

为 Oracle Solaris 11 卸载 pkcs11_kms

要卸载 pkcs11_kms,请输入以下命令:

# cryptoadm uninstall \
provider='/usr/lib/security/$ISA/pkcs11_kms.so.1'
# pkg uninstall system/library/security/pkcs11_kms

为 Oracle Solaris 10 Update 10 卸载 pkcs11_kms

要卸载 pkcs11_kms,请输入以下命令:

# pkgrm SUNWpkcs11kms

为 Oracle Enterprise Linux 卸载 pkcs11_kms

与 Oracle 数据库打包在一起时,pkcs11_kms 提供程序将通过用于卸载 Oracle 数据库产品的步骤进行卸载。如果是通过其他方法安装的,则遵循使用 rpm 安装的相反过程。

例如:

# rpm -e pkcs11kms-1.0.0-1.x86_64.rpm

为 TDE 配置 OKM

下面一节讨论 TDE 配置。

Oracle 数据库 TDE 配置

每个 Oracle 数据库服务器都必须在受支持的 pkcs11_kms 平台上运行 11.2.0.2 或更高版本。必须安装必需的修补程序 12626642。可从以下 URL 获得该修补程序:

https://updates.oracle.com/download/12626642.html

安装后,必须为 TDE 访问配置共享库文件 (pkcs_kms.so)。库路径特定于操作系统:

  • /usr/lib/security/pkcs11_kms.so.1(仅限 Solaris,32 位)

  • /usr/lib/security/amd64/pkcs11_kms.so.1(仅限 Solaris,64 位)

  • /usr/lib64/pkcs11_kms.so.1(仅限 Linux,64 位)

为 TDE 配置 OKM 群集

以下列表总结了为 TDE 配置 OKM 群集所需的任务:

  • 这些任务假设为正常运行的 OKM 群集配置了相应的管理用户和角色。

  • OKM 群集中的所有 KMA 必须运行的最低版本是 OKM 2.4.1 和复制版本 13。

  1. 定义密钥策略。

    请参见:

  2. 定义组定义。

    为密钥组分配密钥策略,并为组分配方便的名称。

    请参见:

  3. 配置代理。

    请参见:

  4. 将各个代理与默认密钥组关联。

    请参见""Key Group Assignment to Agents" 菜单"

代理 ID

代理 ID 可以是对配置来说有意义的任何标识符,应该对应于 Oracle 用户,以便数据库实例与代理关联。

口令短语

选择一个强口令短语,因为该口令短语也会在 Oracle 主机上配置,通过可打开 Wallet 的 DDL 声明(例如 pkcs11_kms 令牌)与 OKM 进行验证。有关口令短语要求的信息,请参见"创建代理"

OneTimePassphrase 标记应设置为 "false",以允许任何时候需要打开 TDE "Wallet" 都会进行基于密码的验证,以及从共享通用代理 ID 的多个 Oracle RAC 节点上进行验证。为了实现最高的安全性,可将其设置为默认值 "true",但是这仅在单节点 Oracle 数据库配置中有效,在 Oracle RAC 中无效。将 OneTimePassphrase 设置为 "true" 时,仅当代理首次成功验证时,才会返回代理的 X.509 证书。pkcs11_kms 提供程序将 X.509 证书的私钥安全地存储在由口令短语保护的 PKCS#12 文件中。随后,X.509 证书和相应的私钥将用于代理与 OKM 的事务。有关 pkcs11_kms 提供程序存储的其他信息,请参见 kmscfg(1M)。

密钥组

将代理分配给为 TDE 定义的密钥组。pkcs11_kms 提供程序仅支持在默认密钥组中执行密钥创建操作,包括重新加密操作。对于与代理关联的其他任何非默认密钥组,仅允许它们从这些组中的密钥中进行密钥检索。该功能可在只读/只解密数据库情形中使用,例如支持绝不会生成主密钥但只需能够访问主密钥的辅助数据库。

为 TDE 配置 pkcs11_kms

必须在需要 TDE 主密钥的 Oracle 数据库节点上配置 pkcs11_kms 提供程序。执行以下步骤来配置 pkcs11_kms 提供程序:

  1. O/S 用户注意事项:

    使用 Oracle 数据库用户帐户配置代理和 pkcs11_kms 提供程序。对于 O/S 用户,这不需要特殊特权。当主机支持“多个 Oracle 主目录”时,pkcs11_kms 令牌配置必须符合各个 Oracle 数据库软件所有者的用户帐户。有关更多信息,请参阅《Oracle Database Installation Guide 11g Release 2》。

  2. kmscfg 实用程序按用户每次创建一项插槽配置。可为各个用户定义更多插槽配置,但是每个进程中只有一项配置处于活动状态。

    注意:

    KMS PKCS#11 提供程序的插槽配置目录的默认位置在 Solaris 11 Express 上是 /var/kms/$USER,在 Solaris 11 SRU5 上是 /var/user/$USER/kms。如果您计划将 Solaris 11 Express 系统升级到 Solaris 11 SRU5,则应该先将插槽配置保存到其他位置。

    例如:

    # cd /var/kms/$USER

    # tar cvf ~/save_my_okm_config.tar

    升级后,将插槽配置恢复到新位置。例如:

    # mkdir -p /var/user/$USER/kms

    # cd /var/user/$USER/kms

    # tar xvf ~/save_my_okm_config.tar

    如果您未在升级前备份 pcks11_kms 数据,数据将会丢失,Oracle 数据库用于加密数据的主密钥将不可用。

    kmscfg 实用程序将配置和运行时数据存储在位于以下路径之一的 KMS 配置目录中:

    • /var/user/$USER/kms (Solaris 11)

    • /var/kms/$USER(Solaris 10u10 和 Solaris 11 Express)

    • /var/opt/kms/$USER (Oracle Enterprise Linux)

    该目录将根据客户选择的位置由 $KMSTOKEN_DIR 环境变量覆盖。

    当 kmscfg 运行时,会提供一个“配置文件”名称。该名称用于在上述配置目录中创建的特定于代理的运行时子目录。

  3. 有关插槽配置的默认位置,请参阅 kmscfg 手册页。可以使用 KMSTOKEN_DIR 环境变量对插槽配置进行控制,以定义备用插槽配置和文件系统位置。

    对于 Oracle RAC(代理配置文件必须在 Oracle RAC 节点之间共享),请使用 KMSTOKEN_DIR 环境变量指示 kmscfg 使用相应的共享文件系统路径创建配置文件。如果设置 KMSTOKEN_DIR 环境变量,必须在 shell 配置文件(例如 .bashrc)中为 shell 持续设置,以便始终在数据库执行任何 PKCS#11 操作之前设置。

  4. 为插槽配置和运行时信息分配文件系统存储空间。如果您计划使用 Oracle RAC,请以每个 Oracle RAC 节点用户可读和可写权限定义共享文件系统位置的配置文件。

  5. 分配空间要求,以允许每个代理日志增大。日志文件会自动创建,它是一个有用的故障排除工具。可使用 Solaris 上的 logadm(1M) 或 Oracle Enterprise Linux 上的 logrotate(8) 等工具对 KMSAgentLog.log 文件占用的空间进行管理。为每个代理的配置文件目录分配 10 MB 对于大多数配置来说已经足够。

  6. 使用 kmscfg 实用程序初始化 pkcs11_kms 提供程序。在这一步中,您要为稍后将与 pkcs11_kms 令牌关联的 OKM 代理定义一个配置文件。

     # kmscfg 
     Profile Name: oracle
     Agent ID: oracle
     KMA IP Address: kma1
    

    此时,您已定义 pkcs11 插槽,您可以使用 OKM 核实验证。

    1. 在 Solaris 系统上,使用 cryptoadm(1M) 命令核实验证。请注意,在以下示例中,标记字段显示 CKF_LOGIN_REQUIRED,表明尚未为插槽配置验证的令牌。

      solaris> cryptoadm list -v \ 
      provider='/usr/lib/security/$ISA/pkcs11_kms.so.1' 
      Provider: /usr/lib/security/$ISA/pkcs11_kms.so.1 
      Number of slots: 1  
      Slot #1 
      Description: Oracle Key Management System 
      Manufacturer: Oracle Corporation 
      PKCS#11 Version: 2.20 
      Hardware Version: 0.0 
      Firmware Version: 0.0 
      Token Present: True 
      Slot Flags: CKF_TOKEN_PRESENT 
      Token Label: KMS 
      Manufacturer ID: Oracle Corporation 
      Model: 
      Serial Number:
      Hardware Version: 0.0
      Firmware Version: 0.0
      UTC Time:
      PIN Min Length: 1
      PIN Max Length: 256
      Flags: CKF_LOGIN_REQUIRED
      
    2. 验证 pkcs11_kms 令牌是否可与 OKM 群集进行验证。

      本例使用 Oracle Solaris pktool(1),它是一个不适用于 Linux 平台的实用程序。

      solaris> pktool inittoken currlabel=KMS
      Enter SO PIN:
      Token KMS initialized.
      

      SO(安全官的 PKCS#11 缩写)提示输入由创建代理的 OKM 管理员在上一步中建立的代理的秘密口令短语。

    3. 在 Solaris 系统上,使用 Solaris Crypto Framework cryptoadm(1M) 命令或 pktool(1) 实用程序验证令牌是否已经初始化。请注意,cryptoadm 输出中显示的令牌标记现在是 CKF_TOKEN_INITIALIZED:

      solaris> cryptoadm list -v \
      provider='/usr/lib/security/$ISA/pkcs11_kms.so.1'
       Provider: /usr/lib/security/$ISA/pkcs11_kms.so.1
       Number of slots: 1
       Slot #1
       Description: Oracle Key Management System
       Manufacturer: Oracle Corporation
       PKCS#11 Version: 2.20
       Hardware Version: 0.0
       Firmware Version: 0.0
       Token Present: True
       Slot Flags: CKF_TOKEN_PRESENT
       Token Label: KMS
       Manufacturer ID: Oracle Corporation
       Model:
       Serial Number:
       Hardware Version: 0.0
       Firmware Version: 0.0
       UTC Time:
       PIN Min Length: 1
       PIN Max Length: 256
       Flags: CKF_LOGIN_REQUIRED CKF_TOKEN_INITIALIZED
      
    4. 在 Solaris 系统上,使用 pktool(1) 实用程序验证 PKCS#11 可见令牌的状态:

      glengoyne> pktool tokens
      Flags: L=Login required  I=Initialized  X=User PIN expired  S=SO PIN expired
      Slot ID  Slot Name     Token Name                  Flags
      -------  ---------     ----------                  -----
      1        Sun Crypto    Softtoken      Sun Software PKCS#11 softtoken
      2        Oracle Key Management System              KMS  L
      glengoyne>
      

      这表明仍需要登录到令牌。pktool 输出中标记的含义如下所示:

      glengoyne> pktool tokens -h
      Usage:
         pktool -?    (help and usage)
         pktool -f option_file
         pktool subcommand [options...]
      

      其中子命令可能是:

         tokens
         * flags shown as: L=Login required  I=Initialized  
           E=User PIN expired  S=SO PIN expired
      glengoyne>
      
    5. 在 Solaris 系统上,使用 pktool(1) 实用程序登录到令牌,并以在 kmscfg(1) 步骤中指定的 OKM 群集的 KMA 以及 OKM 管理员为代理创建的口令短语进行验证。该口令短语随 SO PIN 提示提供:

      glengoyne> pktool inittoken currlabel=KMS
      Enter SO PIN:
      Token KMS initialized.
      
    6. 在 Solaris 系统上,使用 pktool(1) 实用程序验证令牌状态,以及令牌现在是否已经初始化:

      glengoyne> pktool tokens
      Flags: L=Login required  I=Initialized  X=User PIN expired  S=SO PIN expired
      Slot ID  Slot Name   Token Name                    Flags
      -------  ---------   ----------                    -----
      1        Sun Crypto  Softtoken         Sun Software PKCS#11 softtoken
      2        Oracle Key Management System              KMS   LI
      
    7. 在 Solaris 系统上,使用 cryptoadm(1M) 命令,通过请求查看令牌支持的机制验证 pkcs11_kms 令牌是否已经初始化:

      glengoyne> cryptoadm list -m -p  provider=/usr/lib/security/'$ISA'/pkcs11_kms.so.1
      Mechanisms:
      CKM_AES_KEY_GEN
      CKM_AES_CBC
      CKM_AES_CBC_PAD
      glengoyne>
      

      在 Solaris 系统上,使用 pktool(1) 实用程序,通过 pkcs11_kms 提供程序创建并列出密钥,如下所示:

       # pktool genkey token=KMS keytype=aes keylen=256
         label=MyKey-test1
       # pktool list token=KMS objtype=key
       # pktool list token=KMS objtype=key label=MyKey-test1
      

      您可以通过 OKM Manager GUI 或 OKM CLI 查看 OKM 系统中的密钥。

    注:

    对于 Solaris,默认情况下 kmscfg(1) 按用户每次仅创建一项插槽配置。

    您可以定义更多插槽配置,但是每个进程中只有一项配置处于活动状态。要做到这一点,您可以使用 KMSTOKEN_DIR 变量定义备用插槽配置和文件系统位置。

    Solaris 11 上的默认位置是 /var/user/$USERNAME/kms,但是您可以创建自己的命名模式。最佳做法可能是

    /var/user/$USERNAME/$AGENTID-$CLUSTER/

    这种命名约定允许 Solaris 根据各种使用情形拥有多个插槽-代理-群集组合。

    对于某些 PKCS#11 配置,建议指定备用位置,例如 TDE 与 Oracle RAC(请参见以上 TDE 配置部分),以便各个节点共享 pkcs11_kms 提供程序的元数据。

  7. 要配置 TDE 以使用自动打开的 Wallet,请遵循本附录开头引用的文档《Oracle Advanced Security Transparent Data Encryption Best Practices》中的说明。

持续操作

以下几节介绍重复执行的 OKM 和 TDE 操作任务。

从 Oracle Wallet 迁移主密钥

旧 Wallet 必须保留,而新主密钥将由 OKM 生成,并由密钥管理系统安全地保护。

请参阅本附录开头引用的文档《Oracle Advanced Security Transparent Data Encryption Best Practices》。

TDE 会生成唯一的密钥标签,用于标识每个主密钥。实际的密钥值从不以纯文本显示,直到将其从 pkcs11_kms 令牌传递给 TDE。“创建的”密钥将从处于激活状态的 AES 256 位密钥池中提取(安全地复制到多个 KMA)。随后,该密钥将根据 PKCS#11 令牌使用的特定代理,与 OKM 密钥策略关联。OKM 随后将按照策略规定的密钥生命周期管理密钥。

重新加密操作

Oracle 数据库管理员必须在密钥生命周期指示之前执行重新加密操作。否则,数据库将无法启动。

请参阅用于执行该操作的 DDL 对应的各种 Oracle 数据库和 TDE 文档。也可以使用 Oracle Enterprise Manager 执行重新加密。

因基于 OKM 策略的密钥到期重新加密

密钥进入操作后状态后,TDE 的每次密钥检索都会在 OKM 审计日志中触发警告,指明检索到了操作后密钥。出现这些审计消息表明是时候重新加密数据库实例的主加密密钥了。OKM 审计消息会指明检索到的特定代理和密钥,以帮助识别 Oracle 数据库实例和进入操作后状态的主加密密钥。可在 OKM 中配置通过 SNMP v3 通告或 SNMP v2 陷阱进行通知,来支持自动执行该过程。

pkcs11_kms 提供程序将尝试通知其 PKCS#11 使用者密钥已经进入操作后状态。通过将主密钥的 PKCS#11 "CKA_ENCRYPT" 属性设置为 "false" 做到这一点。

Oracle Database 11gR2 当前在密钥的加密期间到期后继续使用密钥加密数据。当警报日志中出现以下错误时,您会看到这种行为:

HSM heartbeat died. Likely the connection has been lost. PKCS11 function C_EncryptInit returned
PKCS11 error code: 104
HSM connection lost, closing wallet

如果遇到这种错误,数据库管理员必须执行以下操作:

  1. 为与 pkcs11_kms 令牌关联的用户设置以下环境变量(通常是 Oracle 用户的配置文件):

    # export PKCS11_KMS_ALLOW_ENCRYPT_WITH_DEACTIVATED_KEYS=1
    
  2. 重新启动数据库。

  3. 为数据库实例重新加密主密钥。

为了避免出现上述错误,建议您在与 Oracle 数据库代理关联的 OKM 密钥策略中使用非常长的加密期间。或者,您也可以改变 pkcs11_kms 提供程序的行为来禁用密钥状态检查。为此,请设置以上第 1 步中所述的环境变量。设置该变量后,即可打开 HSM。

尽管如此,TDE 将继续使用该密钥,而不会执行自动重新加密操作。看到操作后密钥检索审计警告的 OKM 管理员必须通知数据库管理员是时候重新加密数据库实例的主密钥了。

从其他 HSM 解决方案转换

有关从其他供应商的 HSM 解决方案转换到 OKM 所需的具体步骤,请联系 Oracle 技术支持人员。

密钥销毁

在销毁进入操作后阶段的密钥之前,OKM 管理员必须验证是否不再使用该密钥。

OKM 管理员负责定期销毁处于操作后阶段的密钥。通过 pkcs11_kms 提供程序删除密钥不受 OKM 支持,这是一项受限制的操作,为分配了操作员角色的 OKM 用户而保留。一旦销毁某个密钥,检索它的任何尝试都会失败,包括 PKCS#11 C_FindObjects 请求。

支持 Oracle RMAN 和/或 Oracle 数据泵的密钥传输

使用 Oracle RMAN 和/或 Oracle 数据泵可能需要能够将主密钥提供给其他 OKM 群集(或许在灾难恢复站点或借助伙伴)。OKM 密钥传输操作可使用安全密钥导出和密钥导入服务轻松支持这一点。有关更多信息,请参见"密钥传输"

请执行以下步骤:

  1. 在源和目标 OKM 群集之间建立密钥传输伙伴。

  2. 确定要导出的支持 Oracle RMAN 备份的 TDE 主密钥或使用 Oracle 数据泵导出的加密数据。

  3. 从源 OKM 群集导出密钥。这将创建一个安全密钥导出文件。

  4. 将导出的密钥文件传送给传输伙伴。

  5. 目标传输伙伴将密钥导入其 OKM 群集。

运行 Oracle RMAN 恢复或 Oracle 数据泵导入操作,以重新创建需要密钥的数据库实例。这需要在导入位置执行将 TDE 与 OKM 结合使用所需的配置步骤。随后,恢复或导入操作将访问 OKM 中解密数据库实例所用列或表空间密钥所需的通用主密钥。

管理

激活系统后,请按照以下准则有效地管理和监视解决方案。

证明、审计和监视

Oracle 建议执行以下操作:

  • 查看并监视 TDE 代理的 OKM 活动历史记录,以帮助检测问题。

  • 审计员可使用 OKM 审计事件证明 TDE 正在从 OKM 群集中访问其主密钥。

  • 为 OKM 配置 SNMP 管理器。

  • 探究 OKM CLI 的使用,以生成特定于企业的报告。

在 OKM 中找到 TDE 主密钥

您可以使用 GUI 管理工具或 CLI 在 OKM 中找到 TDE 主密钥。TDE 会生成主密钥标签,OKM 将使用数据单元的 External Tag 属性来存储该值。TDE 主密钥生成操作(包括重新加密操作)始终在 OKM 群集中创建新的数据单元对象和密钥对象。

要找到 TDE 主密钥,请执行以下操作:

  1. 对 OKM 数据单元执行查询,并使用以下 ExternalTag 过滤器过滤列表:"ExternalTag" begins with "ORACLE.TDE"。所有 TDE 密钥标签都以该字符串开头,所以这将生成由 TDE 创建的 OKM 数据单元的列表。每个 OKM 数据单元都有一个 TDE 主密钥与其关联。可使用 OKM GUI 查看这些密钥,以检查其生命周期状态和其他属性,例如密钥组、导出/导入状态,以及哪些 OKM 备份包含销毁的密钥。也可以使用 OKM CLI 查看这些密钥。例如:

    >okm listdu --kma=acme1 --user=joe \
    --filter="ExternalTag=ORACLE.TDE"
    
  2. 当多个 Oracle 数据库实例共享一个 OKM 群集时,OKM 管理员可确定哪些密钥对应于特定数据库,方法是在审计事件中查询对应于该数据库实例的代理。可使用 Oracle GUI 查看这些审计事件。使用过滤器 "Operation equals CreateDataUnit" 过滤代理的审计历史记录。这样会生成对应于 TDE 主密钥创建的审计事件列表。审计事件详细信息提供了用于确定主密钥的特定数据单元的必要信息。也可以使用 OKM CLI 查看这些审计事件。例如:

    >okm listauditevents --kma=acme1 --user=joe \
    --filter="Operation=CreateDataUnit"
    

故障排除

本节介绍将 OKM 与 TDE 结合使用时可能会遇到的错误情况。

无法检索主密钥

无法检索主密钥时,Oracle 数据库会报告以下错误之一:

  • ORA-28362

  • ORA-06512

如果遇到这些错误,请执行以下诊断步骤来确定问题:

  1. 检查 $ORACLE_BASE/diag/rdbms/$SID/$SID/trace/alert_$SID.log 文件。该文件记录了与用于访问加密 Wallet 的 "alter" DDL 声明相关的成功/失败消息。

  2. 检查 pkcs11_kms 配置目录 ($KMSTOKEN_DIR/KMSAgentLog.log) 中的 KMSAgentLog.log 文件。

  3. 验证 OKM 的常规状态。检查以下各项:

    • KMA 是否处于活动状态?

    • KMA 是否处于锁定状态?

    • 密钥池是否已耗尽?

    • KMA ILOM/ELOM 故障

    • KMA 控制台消息

  4. 按前面所示验证 pkcs11_kms 令牌的状态。

  5. 通过检查代理的 OKM 审计事件来验证代理的状态,确保已注册并启用代理。

  6. 验证从 Oracle 数据库主机到 OKM 节点的网络连接。

  7. 与 Oracle 技术支持部门联系。可能会要求您提供一个或多个 KMA 系统转储。

丢失 pkcs11_kms 配置目录

按照以下过程恢复丢失或损坏的 pkcs11_kms 令牌配置文件:

  1. 执行"为 TDE 配置 OKM"中所述的配置步骤。

  2. 仅限 Solaris-将以下数据单元过滤器用于 OKM:"ExternalTag" begins with "ORACLE.TDE",重新填充令牌的元数据。

  3. 仅限 Solaris-将该列表的结果保存到文件(例如 "du.lst")中,然后执行以下 shell 脚本:

    for label in `awk '{print $2}' < du.lst `
    do
    pktool list token=KMS objtype=key label="${label}"
    done
    

无可用插槽错误

发出任何 PKCS#11 操作时,客户机都收到 "No Slots Available" 错误。

  1. 确保 kmscfg 实用程序已成功运行。

  2. 确保已正确安装和配置 pkcs11_kms 提供程序。

CKA_GENERAL_ERROR 错误

尝试检索密钥时,客户机收到 CKA_GENERAL_ERROR 错误。

  1. 验证客户机在 OKM 群集中是否有默认密钥组。

  2. 从 $KMSTOKEN_DIR/KMSAgentLog.log 文件中查看更多信息。

无法打开 PKCS#12 文件错误

$KMSTOKEN_DIR/KMSAgentLog.log 文件中出现 "Could not open PKCS#12 file" 错误。

  1. 在 OKM 群集中选择审计事件,以确定最近是否更改了代理口令短语。

  2. 删除 $KMSTOKEN_DIR 下的 <profile-name> 目录。