Sun Java System Directory Server Enterprise Edition 6.3 管理指南

加密属性值

属性加密可保护存储在目录中的敏感数据。属性加密允许您指定以加密格式存储条目的某些属性。这可防止读取存储在数据库文件、备份文件和导出的 LDIF 文件中的数据。

使用此功能,将属性值存储到目录服务器数据库之前会对其进行加密,并在返回给客户端之前解密回原始值。您必须使用访问控制来阻止没有权限的客户端访问此类属性,并在客户端和目录服务器之间传输属性值时使用 SSL 对属性值进行加密。有关一般情况下的数据安全性和特殊情况下的属性加密的结构性概述,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》

只有在服务器上配置和启用 SSL 之后,属性加密才处于活动状态。但在默认情况下,任何属性都未加密。属性加密是在后缀级别上配置的,这意味着会在后缀包含该属性的每个条目中加密该属性。如果您要在整个目录中加密属性,则必须在每个后缀中为该属性启用加密。


注意 – 注意 –

属性加密将影响与后缀关联的所有数据和索引文件。如果修改现有后缀的加密配置,则必须先导出该后缀的内容,再更改配置,然后重新导入内容。DSCC 可以帮助您执行这些步骤。有关使用 DSCC 的详细信息,请参见目录服务控制中心界面

为了更加安全,在为任何属性启用加密时,都应手动删除可能仍包含未加密值的数据库缓存文件和数据库日志文件。配置属性加密中介绍了删除这些文件的过程。

在新后缀中装入或创建数据之前,应该启用所有加密属性。


如果选择加密被某些条目用作命名属性的属性,则 DN 中显示的值将不会被加密。存储在条目中的值将被加密。

即使可以在配置加密时选择 userPassword 属性,也不会实际提高安全性,除非需要以明文形式存储密码。DIGEST-MD5 SASL 验证就是这种情况。如果密码已在密码策略中定义了加密机制,则进一步加密只能使安全性略为提高,且反而会影响每个绑定操作的性能。

在存储时,加密的属性前会加上一个表示所用加密算法的密码标记。使用 DES 加密算法的加密属性将显示为如下形式:


{CKM_DES_CBC}3hakc&jla+=snda%

当您考虑到数据加密而联机导入数据时,就已经提供了用于通过服务器验证的密钥数据库密码,系统不会再出现此提示。如果要脱机导入数据,目录服务器会先提示您输入密码,然后才允许您加密要导入的数据。解密数据(此操作需要更高的安全性)时,无论联机还是脱机执行导出操作,目录服务器都会自动提示您输入密钥数据库密码。这可进一步提高安全性。


注 –

只要证书或私钥不发生更改,服务器将继续生成相同的密钥。因此,如果两个服务器实例使用相同的证书,则可以将数据从一个服务器实例传输到另一个服务器实例(先导出然后再导入)。


属性加密和性能

虽然属性加密提供了增强的数据安全性,但也会影响系统性能。请仔细考虑哪些属性需要加密,并且只加密您认为特别敏感的那些属性。

由于可以通过索引文件直接访问敏感数据,因此必须加密与加密属性相对应的索引键,以确保属性受到完整保护。如果索引已对目录服务器性能造成影响(尚未包括加密索引键所造成的影响),请在第一次将数据导入或添加到数据库之前配置属性加密。此过程可确保对加密属性的索引就像从头开始编制一样。

属性加密使用注意事项

执行属性加密功能时请考虑以下事项:

Procedure配置属性加密

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 如果要配置属性加密的后缀中包含任何条目,都必须先将该后缀的内容导出到 LDIF 文件。

    如果后缀包含加密的属性,并且您计划使用导出的 LDIF 文件重新初始化该后缀,则可以使这些属性在导出的 LDIF 文件中保持加密状态。

  2. 要启用属性加密,请使用以下命令:


    $ dsconf create-encrypted-attr -h host -p port suffix-DN attr-name cipher-name
    

    其中 cipher-name 可为以下任一选项:

    • des - DES 块密码

    • des3 - 3DES 块密码

    • rc2 - RC2 块密码

    • rc4 - RC4 流密码

    例如:


    $ dsconf create-encrypted-attr -h host1 -p 1389 dc=example,dc=com uid rc4
  3. 要将加密的属性还原为原始状态,请使用以下命令:


    $ dsconf delete-encrypted-attr -h host -p port suffix-DN attr-name
    
  4. 如果更改了配置以加密一个或多个属性,并且在执行导入操作前这些属性已具有值,请清除数据库缓存并删除日志。

    在数据库缓存和数据库日志中不会显示任何未加密的值。


    注 –

    如果删除这些文件,将丢失某些跟踪信息。此外,在删除这些文件之后,服务器将处于恢复模式,可能需要很长时间才能重新启动。


    清除数据库缓存和删除日志:

    1. 停止目录服务器,如启动、停止和重新启动目录服务器实例所述。

    2. 以超级用户或具有管理员权限的用户身份从文件系统中删除数据库缓存文件。


      # rm instance-path/db/__db.*
    3. 从文件系统中删除数据库日志文件。


      # rm instance-path/db/log.0000000001
    4. 重新启动目录服务器。

      服务器将自动创建新的数据库缓存文件。在重新填充缓存之前,此后缀中的操作性能可能会略受影响。

  5. 使用 LDIF 文件初始化后缀,如初始化后缀所述。

    装入文件并创建相应索引之后,指定属性的所有值都将被加密。