您可以使用硬件加速器令牌来提高加密性能并提供安全密钥存储功能。此外,还可以通过智能卡为最终用户提供移动安全密钥存储。
当 Sun Java System Application Server 8.1 和 8.2 Standard Edition 或 Enterprise Edition 在 Java 2 Platform, Standard Edition(J2SE 平台)5.0 上运行时,支持针对 SSL 或 TLS 通信使用 PKCS#11 令牌,以及使用网络安全服务 (Network Security Service, NSS) 工具来管理密钥和 PKCS#11 令牌。本节介绍 Application Server 如何提供此支持,并指导您完成相关配置的过程。
J2SE 5.0 PKCS#11 提供者可以轻松与 Application Server 运行时集成。通过这些提供者,您可以使用硬件加速器以及 Application Server 中的其他 PKCS#11 令牌来提高性能,并保护 SSL 或 TLS 通信中固有的私钥。
本节包括以下主题:
Sun Java System Application Server 8.1 和 8.2 Standard Edition 或 Enterprise Edition 已针对 Sun Crypto Accelerator 1000 (SCA-1000) 和 SCA-4000 进行了测试。
Application Server 与 J2SE 5.0 结合使用时,可以与 PKCS#11 令牌进行通信。Application Server 附带有 NSS PKCS#11 令牌库(对于 NSS 内部 PKCS#11 模块,通常称为 NSS 软令牌)和 NSS 命令行管理工具。有关更多详细信息,请参见使用网络安全服务 (NSS) 工具。
使用 NSS 工具可以在 PKCS#11 令牌中创建密钥和证书,使用 J2SE PKCS#11 提供者可以在运行时访问令牌密钥和证书。PKCS#11 提供者是用作本地 PKCS#11 库包装器的加密服务提供者。PKCS#11 令牌通常是指所有具有本地 PKCS#11 接口的硬件令牌和软件令牌。硬件令牌是指以物理设备(例如硬件加速器及智能卡)实现的 PKCS#11 令牌。软件令牌是指完全以软件实现的 PKCS#11 令牌。
如果在 J2SE 1.4.x 平台上运行 Application Server,则仅支持一种 PKCS#11 令牌,即 NSS 软令牌。
对于 Microsoft Windows 环境,将 NSS 库的位置 AS_NSS 以及 NSS 工具目录 AS_NSS_BIN 添加到 PATH 环境变量中。为简单起见,本节中所述的过程仅使用 UNIX 命令。您应在适当的情况下将 UNIX 变量替换为 Windows 变量。
配置硬件加密加速器包括两个主要过程:
本节介绍如何使用 NSS 安全性工具 modutil 来配置 PKCS#11 令牌。可以使用以下过程配置 PKCS#11 令牌。
输入以下命令(在一行中输入全部内容):
modutil -dbdir AS_NSS_DB -nocertdb -force -add moduleName -libfile absolute_path_of_pkcs11_library -mechanisms list_of_security_mechanisms
其中,AS_NSS_DB 是 NSS 数据库目录(如同使用域管理服务器 (Domain Administration Server, DAS) 时的 AS_DOMAIN_CONFIG)
例如,要配置硬件加速器令牌,请输入以下命令(在一行中输入全部内容):
modutil -dbdir AS_NSS_DB -nocertdb -force -add "Sun Crypto Accelerator" -libfile /opt/SUNWconn/crypto/lib/libpkcs11.so -mechanisms RSA:DSA:RC4:DES
在本例中,硬件加速器为 SCA–1000 加密加速器。默认情况下,相应的 PKCS#11 库位于 /opt/SUNWconn/crypto/lib/libpkcs11.so 中。
mechanisms 必须是可用于令牌中的加密机制的完整列表。要仅使用少数可用的加密机制,请参见配置 J2SE 5.0 PKCS#11 提供者。有关所有支持的机制的列表,请参见 NSS Security Tools 站点 http://www.mozilla.org/projects/security/pki/nss/tools 上的 modutil 文档。
下面的示例假设在安装令牌时指定的令牌名称为 mytoken。
要检验硬件加速器配置是否正确,请输入以下命令:
modutil -list -dbdir AS_NSS_DB
标准输出类似于以下内容:
Using database directory /var/opt/SUNWappserver/domains/domain1/config ... Listing of PKCS#11 Modules ----------------------------------------------------------- 1. NSS Internal PKCS#11 Module slots: 2 slots attached status: loaded slot: NSS Internal Cryptographic Services token: NSS Generic Crypto Services slot: NSS User Private Key and Certificate Services token: NSS Certificate DB 2. Sun Crypto Accelerator library name: /opt/SUNWconn/crypto/lib/libpkcs11.so slots: 1 slot attached status: loaded slot: Sun Crypto Accelerator:mytoken token: mytoken ----------------------------------------------------------- |
本节介绍几个使用 certutil 和 pk12util 创建和管理密钥和证书的常用过程。有关certutil 和 pk12util 的详细信息,请参见使用网络安全服务 (NSS) 工具以及 NSS Security Tools 站点 http://www.mozilla.org/projects/security/pki/nss/tools 上的文档。
通过在 java.security 属性文件(位于 Java 运行时的 JAVA_HOME/jre/lib/security 目录中)中配置 PKCS#11 提供者,您还可以使用 J2SE keytool 实用程序来管理密钥和证书。有关使用 keytool 的详细信息,请参见位于 http://java.sun.com/j2se/1.5.0/docs/guide/secuirty/p11guide.html 的《Java PKCS#11 Reference Guide》。
本节包括以下数个主题:
要列出已配置的 PKCS#11 令牌中的密钥和证书,请运行以下命令:
certutil -L -d AS_NSS_DB [-h tokenname]
例如,要列出默认 NSS 软令牌的内容,请键入以下命令:
certutil -L -d AS_NSS_DB
标准输出类似于以下内容:
verisignc1g1 T,c,c verisignc1g2 T,c,c verisignc1g3 T,c,c verisignc2g3 T,c,c verisignsecureserver T,c,c verisignc2g1 T,c,c verisignc2g2 T,c,c verisignc3g1 T,c,c verisignc3g2 T,c,c verisignc3g3 T,c,c s1as u,u,u |
此输出的左列显示了令牌的名称,右列显示了一组(三个)信任属性,对于 Application Server 证书,这组属性通常为 T,c,c。与 J2SE java.security.KeyStore API(它仅包含一个信任级别)不同,NSS 技术包含多个信任级别。Application Server 主要关注第一个信任属性,该属性说明此令牌如何使用 SSL。对于该属性:
T 表示可信任证书授权机构 (Certificate Authority, CA) 颁发客户机证书。 |
u 表示您可以使用证书(及密钥)进行验证或签名。 |
属性组合 u,u,u 表示数据库中存在私钥。 |
要列出硬件令牌 mytoken 的内容,请运行以下命令:
certutil -L -d AS_NSS_DB -h mytoken
系统将提示您输入硬件令牌的密码。标准输出类似于以下内容:
Enter Password or Pin for "mytoken": mytoken:Server-Cert 	u,u,u |
可以使用 certutil 创建自签名证书以及导入或导出证书。要导入或导出私钥,请使用 pk12util 实用程序。有关更多详细信息,请参见使用网络安全服务 (NSS) 工具。
在 Application Server 中,请勿直接使用 NSS 工具 certutil 和 modutil 修改 NSS 密码。如果这样做,Application Server 中的安全性数据可能会被破坏。
Application Server 依靠 J2SE PKCS#11 提供者在运行时访问位于 PKCS#11 令牌中的密钥和证书。默认情况下,Application Server 将针对 NSS 软令牌来配置 J2SE PKCS#11 提供者。本节介绍如何覆盖 J2SE PKCS#11 提供者的默认配置。
在 Application Server 中,将针对每个 PKCS#11 令牌生成以下默认 PKCS#11 配置参数。
默认 NSS 软令牌的配置:
name=internal library=${com.sun.enterprise.nss.softokenLib} nssArgs="configdir='${com.sun.appserv.nss.db}' certPrefix='' keyPrefix='' secmod='secmod.db'" slot=2 omitInitialize = true |
SCA 1000 硬件加速器的配置:
name=HW1000 library=/opt/SUNWconn/crypto/lib/libpkcs11.so slotListIndex=0 omitInitialize=true |
这些配置符合《Java PKCS#11 Reference Guide》中所述的语法。
除了必须唯一之外,对名称参数没有任何要求。某些早期版本的 J2SE 5.0 仅支持字母数字字符。
您可以通过创建自定义配置文件来覆盖默认配置参数。例如,可以在 SCA–1000 中明确禁用 RSA 加密器和 RSA 密钥对生成器。有关禁用 RSA 加密器和 RSA 密钥对生成器的详细信息,请参见 http://www.mozilla.org/projects/security/pki/nss/tools。
要创建自定义配置文件,请执行以下操作:
使用以下代码创建名为 install-dir/mypkcs11.cfg 的配置文件并保存此文件。
name=HW1000 library=/opt/SUNWconn/crypto/lib/libpkcs11.so slotListIndex=0 disabledMechanisms = { 	CKM_RSA_PKCS 	CKM_RSA_PKCS_KEY_PAIR_GEN } omitInitialize=true |
如果有必要,请更新 NSS 数据库。在这种情况下,更新 NSS 数据库以便它禁用 RSA。
运行以下命令:
modutil -undefault "Sun Crypto Accelerator" -dbdir AS_NSS_DB -mechanisms RSA |
mechanisms 列表中的算法名称与默认配置中的算法名称不同。有关 NSS 中有效 mechanisms 的列表,请参见 NSS 安全性工具站点 http://www.mozilla.org/projects/security/pki/nss/tools 上的 modutil 文档。
通过在适当位置添加属性使用该更改来更新服务器,如下所示:
<property name="mytoken" value="&InstallDir;/mypkcs11.cfg"/> |
此属性的位置可以为以下位置之一:
如果提供者用于 DAS 或服务器实例,请在相关的 <security-service> 下添加此属性。
如果提供者用于节点代理,请在 domain.xml 文件中相关的 <node-agent> 元素下添加此属性。
重新启动 Application Server。
自定义配置将在重新启动后生效。