本节介绍如何在 Solaris 加密框架中管理软件提供器和硬件提供器。如果需要,可以删除使用的软件提供器和硬件提供器。例如,可以禁止实施某软件提供器的算法。然后,可以强制系统使用其他软件提供器的算法。
Solaris 加密框架可为多种类型的使用者提供算法:
用户级提供器为与 libpkcs11 库相链接的应用程序提供 PKCS #11 加密接口
内核软件提供器为 IPsec、Kerberos 和其他 Solaris 内核组件提供算法
内核硬件提供器通过 pkcs11_kernel 库提供内核使用者和应用程序可使用的算法
普通用户只能使用用户级机制。
% 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 |
列出 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,… |
在以下示例中,列出了用户级库 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 |
策略确定可使用的机制。管理员设置该策略。管理员可以选择禁用特定提供器的机制。-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. |
承担主管理员角色,或成为超级用户。
主管理员角色拥有主管理员配置文件。要创建角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
列出系统可使用的软件提供器。
# 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 |
# pkgadd -d /path/to/package pkginst |
该软件包必须包括由 Sun 提供的证书签名的软件。要请求 Sun 提供的证书并对提供器签名,请参见 《Solaris 开发者安全性指南》中的附录 F “打包和签署加密提供者”。
该软件包应包含这样的脚本:通知加密框架具有一组机制的另外一个提供器可用。有关打包要求的信息,请参见 《Solaris 开发者安全性指南》中的附录 F “打包和签署加密提供者”。
刷新提供器。
如果添加了软件提供器或者添加了硬件并为该硬件添加了指定的策略,则需要刷新提供器。
# svcadm refresh svc:/system/cryptosvc |
查找列表中的新提供器。
在本例中,安装了新的内核软件提供器。
# cryptoadm list … kernel software providers: des aes blowfish arcfour sha1 md5 rsa swrand ecc <-- 增加的提供器 … |
在以下示例中,将安装签名的 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 |
如果不能使用库提供器的某些加密机制,则可以删除所选机制。此过程使用 pkcs11_softtoken 库中的 DES 机制为例。
要创建包括加密管理权限配置文件的角色并将该角色指定给用户,请参见示例 9–7。
% 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, … |
$ cryptoadm list -p user-level providers: ===================== … /usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled. random is enabled. … |
禁用无法使用的机制。
$ cryptoadm disable provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so \ > mechanism=CKM_DES_CBC,CKM_DES_CBC_PAD,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_ECB,CKM_DES_CBC_PAD,CKM_DES_CBC. random is enabled. |
在以下示例中,将使禁用的 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. |
$ 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. |
$ 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: … |
如果加密框架提供多种模式的提供器(如 AES),则可以删除所使用的速度较慢的机制或损坏的机制。此过程使用 AES 算法为例。
要创建包括加密管理权限配置文件的角色并将该角色指定给用户,请参见示例 9–7。
$ cryptoadm list -m provider=aes aes: CKM_AES_ECB,CKM_AES_CBC |
列出可用的机制。
$ cryptoadm list -p provider=aes aes: all mechanisms are enabled. |
$ cryptoadm disable provider=aes mechanism=CKM_AES_ECB |
列出可用的机制。
$ cryptoadm list -p provider=aes aes: all mechanisms are enabled, except CKM_AES_ECB. |
在以下示例中,将使禁用的 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. |
在以下示例中,将临时删除所使用的 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 |
如果内核使用者正在使用内核软件提供器,则不会卸载该软件。此时将显示错误消息,但可继续使用该提供器。
在以下示例中,将删除所使用的 AES 提供器。一旦删除,该 AES 提供器将不会在内核软件提供器的策略列表中显示。
$ cryptoadm uninstall provider=aes $ cryptoadm list … kernel software providers: des blowfish arcfour sha1 md5 rsa swrand |
如果内核使用者正在使用内核软件提供器,将显示错误消息,但可继续使用该提供器。
$ cryptoadm install provider=aes mechanism=CKM_AES_ECB,CKM_AES_CBC $ cryptoadm list … kernel software providers: des aes blowfish arcfour sha1 md5 rsa swrand |
硬件提供器将自动定位和装入。有关更多信息,请参见 driver.conf(4) 手册页。
添加期望在 Solaris 加密框架中使用的硬件时,该硬件将使用 SPI 在内核中注册。框架将检查是否已对硬件驱动程序签名。具体地说,框架将检查是否已使用 Sun 发布的证书对驱动程序的对象文件签名。
列出系统中可用的硬件提供器。
% cryptoadm list … kernel hardware providers: dca/0 |
列出该板提供的机制。
% cryptoadm list -m provider=dca/0 dca/0: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL,… |
列出板中可使用的机制。
% cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled. random is enabled. |
可以有选择地禁用硬件提供器的机制和随机数功能。要再次启用它们,请参见示例 14–24。
列出板中可用的机制和功能。
% cryptoadm list -p provider=dca/0 dca/0: all mechanisms are enabled. random is enabled. |
成为超级用户或承担包括加密管理权限配置文件的角色。
要创建包括加密管理权限配置文件的角色并将该角色指定给用户,请参见示例 9–7。
选择要禁用的机制或功能:
禁用选择的机制。
# 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. |
# 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. |
缺省情况下,将启用 Solaris 加密框架。当由于任何原因 kcfd 守护进程失败时,可以使用服务管理工具重新启动加密服务。有关更多信息,请参见 smf(5) 和 svcadm(1M) 手册页。有关重新启用加密服务的区域的影响,请参见加密服务和区域。
检查加密服务的状态。
% svcs \*cryptosvc\* STATE STIME FMRI offline Dec_09 svc:/system/cryptosvc:default |
成为超级用户或承担启用加密服务的等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见配置 RBAC(任务列表)。
# svcadm enable svc:/system/cryptosvc |
在以下示例中,将在全局区域中刷新加密服务。因此,每个非全局区域中的内核级加密策略也将被刷新。
# svcadm refresh system/cryptosvc |