系统管理指南:安全性服务

管理加密框架

本节介绍如何在 Solaris 加密框架中管理软件提供器和硬件提供器。如果需要,可以删除使用的软件提供器和硬件提供器。例如,可以禁止实施某软件提供器的算法。然后,可以强制系统使用其他软件提供器的算法。

Procedure如何列出可用提供器

Solaris 加密框架可为多种类型的使用者提供算法:

  1. 以简要格式列出提供器。

    普通用户只能使用用户级机制。


    % cryptoadm list
    
    user-level providers:
    
        /usr/lib/security/$ISA/pkcs11_kernel.so
    
        /usr/lib/security/$ISA/pkcs11_softtoken.so
    
    
    
    kernel software providers:
    
        des
    
        aes
    
        blowfish
    
        arcfour
    
        sha1
    
        md5
    
        rsa
    
    
    
    kernel hardware providers:
    
        dca/0
  2. 列出 Solaris 加密框架中的提供器及其机制。

    以下输出列出了所有的机制。但是,所列出的一些机制可能无法使用。要仅列出管理员已批准使用的机制,请参见示例 14–15

    为了便于显示,已重新设置输出格式。


    % cryptoadm list -m
    
    user-level providers:
    
    =====================
    
    /usr/lib/security/$ISA/pkcs11_kernel.so: CKM_MD5,CKM_MD5_HMAC,
    
    CKM_MD5_HMAC_GENERAL,CKM_SHA_1,CKM_SHA_1_HMAC,CKM_SHA_1_HMAC_GENERAL,
    
    …
    
    /usr/lib/security/$ISA/pkcs11_softtoken.so: 
    
    CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB,CKM_DES_KEY_GEN,
    
    CKM_DES3_CBC,CKM_DES3_CBC_PAD,CKM_DES3_ECB,CKM_DES3_KEY_GEN,
    
    CKM_AES_CBC,CKM_AES_CBC_PAD,CKM_AES_ECB,CKM_AES_KEY_GEN,
    
    …
    
    kernel software providers:
    
    ==========================
    
    des: CKM_DES_ECB,CKM_DES_CBC,CKM_DES3_ECB,CKM_DES3_CBC
    
    aes: CKM_AES_ECB,CKM_AES_CBC
    
    blowfish: CKM_BF_ECB,CKM_BF_CBC
    
    arcfour: CKM_RC4
    
    sha1: CKM_SHA_1,CKM_SHA_1_HMAC,CKM_SHA_1_HMAC_GENERAL
    
    md5: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL
    
    rsa: CKM_RSA_PKCS,CKM_RSA_X_509,CKM_MD5_RSA_PKCS,CKM_SHA1_RSA_PKCS
    
    swrand: No mechanisms presented.
    
    
    
    kernel hardware providers:
    
    ==========================
    
    dca/0: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL,…

示例 14–14 查找现有的加密机制

在以下示例中,列出了用户级库 pkcs11_softtoken 提供的所有机制。


% cryptoadm list -m provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so

/usr/lib/security/$ISA/pkcs11_softtoken.so:

CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB,CKM_DES_KEY_GEN,

CKM_DES3_CBC,CKM_DES3_CBC_PAD,CKM_DES3_ECB,CKM_DES3_KEY_GEN,

…

CKM_SSL3_KEY_AND_MAC_DERIVE,CKM_TLS_KEY_AND_MAC_DERIVE


示例 14–15 查找可用的加密机制

策略确定可使用的机制。管理员设置该策略。管理员可以选择禁用特定提供器的机制。-p 选项显示管理员设置的策略允许的机制列表。


% cryptoadm list -p

user-level providers:

=====================

/usr/lib/security/$ISA/pkcs11_kernel.so: all mechanisms are enabled.

random is enabled.

/usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled.

random is enabled.



kernel software providers:

==========================

des: all mechanisms are enabled.

aes: all mechanisms are enabled.

blowfish: all mechanisms are enabled.

arcfour: all mechanisms are enabled.

sha1: all mechanisms are enabled.

md5: all mechanisms are enabled.

rsa: all mechanisms are enabled.

swrand: random is enabled.



kernel hardware providers:

==========================

dca/0: all mechanisms are enabled. random is enabled.

Procedure如何添加软件提供器

  1. 承担主管理员角色,或成为超级用户。

    主管理员角色拥有主管理员配置文件。要创建角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 列出系统可使用的软件提供器。


    # cryptoadm list
    
    user-level providers:
    
            /usr/lib/security/$ISA/pkcs11_kernel.so
    
            /usr/lib/security/$ISA/pkcs11_softtoken.so
    
    
    
    kernel software providers:
    
        des
    
        aes
    
        blowfish
    
        arcfour
    
        sha1
    
        md5
    
        rsa
    
        swrand
    
    
    
    kernel hardware providers:
    
         dca/0
    
  3. 使用 pkgadd 命令添加提供器的软件包


    # pkgadd -d /path/to/package pkginst
    

    该软件包必须包括由 Sun 提供的证书签名的软件。要请求 Sun 提供的证书并对提供器签名,请参见 《Solaris 开发者安全性指南》中的附录 F “打包和签署加密提供者”

    该软件包应包含这样的脚本:通知加密框架具有一组机制的另外一个提供器可用。有关打包要求的信息,请参见 《Solaris 开发者安全性指南》中的附录 F “打包和签署加密提供者”

  4. 刷新提供器。

    如果添加了软件提供器或者添加了硬件并为该硬件添加了指定的策略,则需要刷新提供器。


    # svcadm refresh svc:/system/cryptosvc
    
  5. 查找列表中的新提供器。

    在本例中,安装了新的内核软件提供器。


    # cryptoadm list 
    
    …
    
    kernel software providers:
    
        des
    
        aes
    
        blowfish
    
        arcfour
    
        sha1
    
        md5
    
        rsa
    
        swrand
    
        ecc <-- 增加的提供器

示例 14–16 添加用户级软件提供器

在以下示例中,将安装签名的 PKCS #11 库。


# pkgadd -d /cdrom/cdrom0/SolarisNew

应答提示

# svcadm refresh system/cryptosvc

# cryptoadm list

user-level providers:

==========================

    /usr/lib/security/$ISA/pkcs11_kernel.so

    /usr/lib/security/$ISA/pkcs11_softtoken.so

    /opt/SUNWconn/lib/$ISA/libpkcs11.so.1 <-- 增加的提供器

使用加密框架测试库的开发者可以手动安装该库。


# cryptoadm install provider=/opt/SUNWconn/lib/'$ISA'/libpkcs11.so.1

Procedure如何禁止使用用户级机制

如果不能使用库提供器的某些加密机制,则可以删除所选机制。此过程使用 pkcs11_softtoken 库中的 DES 机制为例。

  1. 成为超级用户或承担包括加密管理权限配置文件的角色。

    要创建包括加密管理权限配置文件的角色并将该角色指定给用户,请参见示例 9–7

  2. 列出特定用户级软件提供器提供的机制。


    % cryptoadm list -m provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so
    
    /usr/lib/security/$ISA/pkcs11_softtoken.so:
    
    CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB,CKM_DES_KEY_GEN,
    
    CKM_DES3_CBC,CKM_DES3_CBC_PAD,CKM_DES3_ECB,CKM_DES3_KEY_GEN,
    
    CKM_AES_CBC,CKM_AES_CBC_PAD,CKM_AES_ECB,CKM_AES_KEY_GEN,
    
    …
  3. 列出可用的机制。


    $ cryptoadm list -p
    
    user-level providers:
    
    =====================
    
    …
    
    /usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled.
    
    random is enabled.
    
    …
  4. 禁用无法使用的机制。


    $ cryptoadm disable provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so \
    
    > mechanism=CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB
    
  5. 列出可使用的机制。


    $ cryptoadm list -p provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so
    
    /usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled,
    
    except CKM_DES_ECB,CKM_DES_CBC_PAD,CKM_DES_CBC. random is enabled.

示例 14–17 启用用户级软件提供器机制

在以下示例中,将使禁用的 DES 机制再次可用。


$ cryptoadm list -m provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so

/usr/lib/security/$ISA/pkcs11_softtoken.so:

CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB,CKM_DES_KEY_GEN,

CKM_DES3_CBC,CKM_DES3_CBC_PAD,CKM_DES3_ECB,CKM_DES3_KEY_GEN,

…

$ cryptoadm list -p provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so

/usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled,

except CKM_DES_ECB,CKM_DES_CBC_PAD,CKM_DES_CBC. random is enabled.

$ cryptoadm enable provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so \

> mechanism=CKM_DES_ECB

$ cryptoadm list -p provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so

/usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled,

except CKM_DES_CBC_PAD,CKM_DES_CBC. random is enabled.


示例 14–18 启用所有用户级软件提供器机制

在以下示例中,将启用用户级库的所有机制。


$ cryptoadm enable provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so all

$ cryptoadm list -p provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so

/usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled.

random is enabled.


示例 14–19 永久删除用户级软件提供器可用性

在以下示例中,将删除 libpkcs11.so.1 库。


$ cryptoadm uninstall provider=/opt/SUNWconn/lib/'$ISA'/libpkcs11.so.1

$ cryptoadm list

user-level providers:

    /usr/lib/security/$ISA/pkcs11_kernel.so

    /usr/lib/security/$ISA/pkcs11_softtoken.so



kernel software providers:

…

Procedure如何禁止使用内核软件提供器

如果加密框架提供多种模式的提供器(如 AES),则可以删除所使用的速度较慢的机制或损坏的机制。此过程使用 AES 算法为例。

  1. 成为超级用户或承担包括加密管理权限配置文件的角色。

    要创建包括加密管理权限配置文件的角色并将该角色指定给用户,请参见示例 9–7

  2. 列出特定内核软件提供器提供的机制。


    $ cryptoadm list -m provider=aes
    
    aes: CKM_AES_ECB,CKM_AES_CBC
  3. 列出可用的机制。


    $ cryptoadm list -p provider=aes
    
    aes: all mechanisms are enabled.
  4. 禁用无法使用的机制。


    $ cryptoadm disable provider=aes mechanism=CKM_AES_ECB
    
  5. 列出可用的机制。


    $ cryptoadm list -p provider=aes
    
    aes: all mechanisms are enabled, except CKM_AES_ECB.

示例 14–20 启用内核软件提供器机制

在以下示例中,将使禁用的 AES 机制再次可用。


cryptoadm list -m provider=aes

aes: CKM_AES_ECB,CKM_AES_CBC

$ cryptoadm list -p provider=aes

aes: all mechanisms are enabled, except CKM_AES_ECB.

$ cryptoadm enable provider=aes mechanism=CKM_AES_ECB

$ cryptoadm list -p provider=aes

aes: all mechanisms are enabled.


示例 14–21 临时删除内核软件提供器可用性

在以下示例中,将临时删除所使用的 AES 提供器。unload 子命令用于禁止在卸载某提供器时自动装入该提供器。例如,安装影响提供器的修补程序时,将使用 unload 子命令。


$ cryptoadm unload provider=aes

$ cryptoadm list

...

kernel software providers:

         des

         aes (inactive)

         blowfish

         arcfour

         sha1

         md5

         rsa

         swrand

刷新加密框架之前,AES 提供器不可用。


$ svcadm refresh system/cryptosvc

$ cryptoadm list

...

kernel software providers:

         des

         aes

         blowfish

         arcfour

         sha1

         md5

         rsa

         swrand

如果内核使用者正在使用内核软件提供器,则不会卸载该软件。此时将显示错误消息,但可继续使用该提供器。



示例 14–22 永久删除软件提供器可用性

在以下示例中,将删除所使用的 AES 提供器。一旦删除,该 AES 提供器将不会在内核软件提供器的策略列表中显示。


$ cryptoadm uninstall provider=aes

$ cryptoadm list

…

kernel software providers:

         des

         blowfish

         arcfour

         sha1

         md5

         rsa

         swrand

如果内核使用者正在使用内核软件提供器,将显示错误消息,但可继续使用该提供器。



示例 14–23 重新安装已删除的内核软件提供器

在以下示例中,将重新安装 AES 内核软件提供器。


$ cryptoadm install provider=aes mechanism=CKM_AES_ECB,CKM_AES_CBC

$ cryptoadm list

…

kernel software providers:

         des

         aes

         blowfish

         arcfour

         sha1

         md5

         rsa

         swrand

Procedure如何列出硬件提供器

硬件提供器将自动定位和装入。有关更多信息,请参见 driver.conf(4) 手册页。

开始之前

添加期望在 Solaris 加密框架中使用的硬件时,该硬件将使用 SPI 在内核中注册。框架将检查是否已对硬件驱动程序签名。具体地说,框架将检查是否已使用 Sun 发布的证书对驱动程序的对象文件签名。

  1. 列出系统中可用的硬件提供器。


    % cryptoadm list
    
    … 
    
    kernel hardware providers:
    
       dca/0
  2. 列出该板提供的机制。


    % cryptoadm list -m provider=dca/0
    
    dca/0: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL,…
  3. 列出板中可使用的机制。


    % cryptoadm list -p provider=dca/0
    
    dca/0: all mechanisms are enabled. random is enabled.

Procedure如何禁用硬件提供器机制和功能

可以有选择地禁用硬件提供器的机制和随机数功能。要再次启用它们,请参见示例 14–24

  1. 列出板中可用的机制和功能。


    % cryptoadm list -p provider=dca/0
    
    dca/0: all mechanisms are enabled. random is enabled.
  2. 成为超级用户或承担包括加密管理权限配置文件的角色。

    要创建包括加密管理权限配置文件的角色并将该角色指定给用户,请参见示例 9–7

  3. 选择要禁用的机制或功能:

    • 禁用选择的机制。


      # cryptoadm list -m provider=dca/0
      
      dca/0: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL,…
      
      CKM_DES_ECB,CKM_DES3_ECB…
      
      random is enabled.
      
      # cryptoadm disable provider=dca/0 mechanism=CKM_DES_ECB,CKM_DES3_ECB
      
      # cryptoadm list -p provider=dca/0
      
      dca/0: all mechanisms are enabled except CKM_DES_ECB,CKM_DES3_ECB.
      
      random is enabled.
    • 禁用随机数生成器。


      # cryptoadm list -p provider=dca/0
      
      dca/0: all mechanisms are enabled. random is enabled.
      
      # cryptoadm disable provider=dca/0 random
      
      # cryptoadm list -p provider=dca/0
      
      dca/0: all mechanisms are enabled. random is disabled.
    • 禁用所有机制。不禁用随机数生成器。


      # cryptoadm list -p provider=dca/0
      
      dca/0: all mechanisms are enabled. random is enabled.
      
      # cryptoadm disable provider=dca/0 mechanism=all
      
      # cryptoadm list -p provider=dca/0
      
      dca/0: all mechanisms are disabled. random is enabled.
    • 禁用硬件的每种功能和机制。


      # cryptoadm list -p provider=dca/0
      
      dca/0: all mechanisms are enabled. random is enabled.
      
      # cryptoadm disable provider=dca/0 all
      
      # cryptoadm list -p provider=dca/0
      
      dca/0: all mechanisms are disabled. random is disabled.

示例 14–24 启用硬件提供器的机制和功能

在以下示例中,将有选择地启用单个硬件的已禁用机制。


# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled except CKM_DES_ECB,CKM_DES3_ECB.

random is enabled.

# cryptoadm enable provider=dca/0 mechanism=CKM_DES3_ECB

# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled except CKM_DES_ECB. random is enabled.

在以下示例中,将仅启用随机数生成器。


# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled, except CKM_MD5,CKM_MD5_HMAC,…. 

random is disabled.

# cryptoadm enable provider=dca/0 random

# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled, except CKM_MD5,CKM_MD5_HMAC,….

random is enabled.

在以下示例中,将仅启用机制。将继续禁用随机生成器。


# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled, except CKM_MD5,CKM_MD5_HMAC,…. 

random is disabled.

# cryptoadm enable provider=dca/0 mechanism=all

# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled. random is disabled.

在以下示例中,将启用板中的所有功能和机制。


# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled, except CKM_DES_ECB,CKM_DES3_ECB.

random is disabled.

# cryptoadm enable provider=dca/0 all

# cryptoadm list -p provider=dca/0

dca/0: all mechanisms are enabled. random is enabled.

Procedure如何刷新或重新启动所有加密服务

缺省情况下,将启用 Solaris 加密框架。当由于任何原因 kcfd 守护进程失败时,可以使用服务管理工具重新启动加密服务。有关更多信息,请参见 smf(5)svcadm(1M) 手册页。有关重新启用加密服务的区域的影响,请参见加密服务和区域

  1. 检查加密服务的状态。


    % svcs \*cryptosvc\*
    
     STATE          STIME    FMRI
    
    offline         Dec_09   svc:/system/cryptosvc:default
  2. 成为超级用户或承担启用加密服务的等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见配置 RBAC(任务列表)


    # svcadm enable svc:/system/cryptosvc
    

示例 14–25 刷新加密服务

在以下示例中,将在全局区域中刷新加密服务。因此,每个非全局区域中的内核级加密策略也将被刷新。


# svcadm refresh system/cryptosvc