SSL 的密钥库配置
使用密钥库配置来定义 WebSphere® Application Server 运行时如何为安全套接字层 (SSL) 配置装入和管理各种类型的密钥库。
缺省情况下,java.security.Security.getAlgorithms("KeyStore") 属性不会在管理控制台中显示预定义的密钥库类型列表。但是,WebSphere Application Server 会检索 java.security.KeyStore 对象可以引用的所有密钥库类型,包括硬件加密、z/OS® 平台、IBM® i 平台、IBM Java™ 密码术扩展 (IBMJCE) 和基于 Java 的证书管理服务 (CMS) 提供程序密钥库。如果在 java.security 文件中指定密钥库提供程序或者以编程方式将它添加至提供程序列表,那么 WebSphere Application Sever 还会检索定制密钥库。检索列表取决于该平台和进程的 java.security 配置。
基于 IBMJCE 文件的密钥库(JCEKS、JKS 和 PKCS12)
<keyStores xmi:id="KeyStore_1" name="NodeDefaultKeyStore"
password="{xor}349dkckdd=" provider="IBMJCE"
location="${USER_INSTALL_ROOT}/config/cells/myhostNode01Cell
/nodes/myhostNode01/key.p12" type="PKCS12" fileBased="true"
hostList="" initializeAtStartup="true" readOnly="false"
description="Default key store for myhostNode01" usage="SSLKeys"
managementScope="ManagementScope_1"/>
有关缺省密钥库配置的更多信息,请参阅 SSL 中的缺省链式证书配置。属性名 | 缺省 | 描述 |
---|---|---|
xmi:id | 可变 | 发出此值来引用配置中另一个区域(例如,SSL 配置)中的密钥库。确保此值在 security.xml 文件中唯一。 |
name | 对于 JSSE 密钥库,缺省值为 CellDefaultKeyStore。对于 JSSE 信任库,缺省值为 CellDefaultTrustStore。 | 用来标识密钥库的名称。可以根据名称是以 DefaultKeyStore 结尾还是以 DefaultTrustStore 结尾来确定密钥库是否是缺省密钥库。 |
password | 缺省密钥库密码为 WebAS。建议您尽可能更改此密码。有关更多信息,请参阅使用脚本编制来更新缺省密钥库密码。 | 用来访问密钥库名称的密码也是用来将密钥存储在密钥库中的缺省值。 |
description | 没有缺省值 | 密钥库的描述。 |
usage | 一个指定密钥库作何用途的属性。 | 有效值为:SSLKeys、KeySetKeys、RootKeys、DeletedKeys、DefaultSigners 和 RSATokenKeys。 |
provider | 缺省提供程序是 IBMJCE。 | 用来实现 type 属性(例如,PKCS12 类型)的 Java 提供程序。可能未指定提供程序。这种情况下将使用第一个用来实现所指定密钥库类型的提供程序。 |
location | 缺省值是可变的,但是它通常引用配置库的节点或单元目录中的 key.p12 文件或 trust.p12 文件。这些文件是 PKCS12 类型的密钥库。 | 密钥库位置引用。如果密钥库是基于文件的,那么位置可以引用密钥库所在节点的文件系统中的任何路径。但是,如果位置在配置库之外,并且您想从管理控制台或者 wsadamin 实用程序以远程方式管理密钥库,请指定包含节点所在的主机名的 hostList 属性。 |
type | 缺省 Java 加密设备密钥库类型为 PKCS12。 | 此类型指定密钥库。有效类型可以是由 java.security.Security.getAlgorithms("KeyStore") 属性返回的那些类型。根据进程和平台 java.security 配置不同,这些类型包括下列密钥库类型:
|
fileBased | 缺省值为 true。 | 对于缺省密钥库,此选项是必需的。它表示文件系统密钥库,因此,可以使用 FileInputStream 或 FileOutputStream 来装入和存储密钥库。 |
hostList | hostList 属性用来指定一个远程主机名,以便可以远程管理密钥库。缺省情况下,没有远程管理的密钥库。所有缺省密钥库都是在配置库中以本地方式管理的,并且与每个节点同步。 | 该选项用于远程管理密钥库。可以设置密钥库的有效节点的主机名。当使用管理控制台或 wsadmin 实用程序来管理此密钥库的证书时,对于许可操作存储密钥库的节点执行 MBean 调用。尽管不能保证密钥库操作同步,但还是可以指定多个主机。例如,执行特定操作时,所列出的其中一个主机可能已停止。因此,使用此列表中的多个主机。 |
initializeAtStartup | 缺省值为 true。 | 在启动期间,此选项将通知运行时初始化密钥库。此选项对于硬件加密设备加速是很重要的。 |
readOnly | 缺省值是 false。 | 此选项将通知不能写入此密钥库的配置。即,不能尝试并且不允许对密钥库执行某些更新操作。z/OS 平台上的 JCERACFKS 就是只读密钥库类型的一个示例。从 WebSphere 证书管理的立场来说,此类型是只读的,但也可以使用 RACF® 的密钥库管理工具来更新此类型。
|
managementScope | 对于基本 Application Server 环境,缺省范围为节点范围;而对于 Network Deployment 环境,缺省范围为单元范围。 | 此选项引用您可以查看此密钥库的特殊管理范围。例如,如果硬件加密设备位于特定节点上,请在拓扑视图中的 | 下从指向该节点的链接来创建密钥库。还可以使用管理范围来隔离密钥库引用。在某些情况下,可能需要只允许特定应用程序服务器引用密钥库;管理范围限于该特定服务器。
![[z/OS]](../images/ngzos.gif)
z/OS 密钥库
WebSphere Application Server 支持基于 IBMJCE 文件的密钥库、Java 密码术扩展密钥库 (JCEKS)、Java 密钥库 (JKS) 以及公用密钥密码术标准 12 (PKCS12) 和特定于 z/OS 的密钥库。z/OS 上的基于 IBMJCE 文件的密钥库支持与分布式平台上的支持完全兼容并且相似。
IBMJCECCA 提供程序扩展并替换前发行版中的 IBMJCE4758 提供程序。IBMJCECCA 提供程序与 IBMJCE4758 提供程序的功能相同。IBMJCECCA 提供程序支持四种密钥库:JCECCAKS (JCE4758KS) 和 JCECCARACFKS (JCE4758RACFKS)。
JCECCAKS 密钥库使用存储在 z/OS 硬件中并由 ICSF 管理的密钥。JCECCARACFKS 密钥库处理在 RACF 密钥环中存储并管理的证书,且密钥存储在 z/OS 硬件中。包括 JCE4758KS 和 JCE4758RACFKS 密钥库只是出于向后兼容性目的,不推荐使用。JCECCAKS 密钥库扩展并替换 JCE4758KS 密钥库。JCECCARACFKS 密钥库扩展并替换 JCE4758RACFKS 密钥库。
- JCECCAKS 密钥库(替换 JCE4758KS)使用存储在 z/OS 硬件中的密钥以及在集成加密服务设施 (ICSF) 中管理的密钥。
- JCERACFKS 是基于资源访问控制设施 (RACF) 的密钥库,用于支持包含在 RACF 密钥库中的密钥和证书。此密钥库类型不支持存储在 ICSF 中的密钥信息。
- JCECCARACFKS(扩展并替换 JCE4758RACFKS)密钥库是基于 RACF 的密钥库,用于支持包含在 RACF 密钥库中的证书和存储在 z/OS 硬件中的密钥。必须指定具有 RACF RACDCERT 的 ICSF 选项。
- 用于 IBMJCE 提供程序的 JCERACFKS 密钥库类型和用于 IBMJCECCA 提供程序的 JCECCARACFKS 密钥库类型仅在提供了 SAF 的 z/OS 平台上可用。
- 可以使用管理控制台将个人证书以基本 64 位编码 ASCII 数据类型或二进制 DER 数据类型抽取到 HFS 中。但是,如果 SSL 配置的密钥库类型为 JCERACFKS,那么会在 HFS 中创建 0 字节的文件。
- 为了在需要密码方面与 JCE 密钥库保持兼容,JCERACFKS 也需要密码,但是该密码必须是 password。此密钥库的安全性并非确实像其他密钥库类型一样通过密码受保护,而是基于执行线程的标识以便通过 RACF 进行保护。此密码用于您在“路径”字段中指定的密钥库文件。
IBMJCE 提供程序只能支持先前列示的一组特定于 z/OS 的密钥库中的 JCERACFKS 密钥库。由于 JCECCAKS 或 JCECCARACFKS 密钥库信息是特定于硬件的,因此 IBMJCE 提供程序不能使用这些密钥库信息。
IBMJCECCA 提供程序可以支持 JCERACFKS、JKS 和 JCEKS 密钥库的软件密钥信息,并且可以利用硬件加速。
已经对 IBMJCE 和 IBMJCECCA 提供程序添加了新的密钥库类 JceRACFKeyStore。因为此密钥库允许 WebSphere Application Server 读取密钥环,所以在从密钥环中检索证书和密钥时请使用此类。但是,如果服务器尝试将数据写入该密钥环,那么会抛出 IOException。虽然 RACFInputStream 可以用于任何密钥库,但是,如果服务器使用 JceRACFKeyStore 类以外的密钥库,那么可能会将存储在 RACF 中的数据无意中写入“分层文件系统”(HFS) 文件。
- 直接使用 RACFInputStream 来将新创建的实例传递给 JceRACFKeyStore 类
- 使用 URLStreamHandler 来调用 RACFInputStream,然后再将实例传递给 JceRACFKeyStore 类
所有 JAVA RACF 服务(包括 JceRACFKeyStore 和 RACFInputStream)都使用 R_datalib (IRRSDL00) 服务从 RACF 中检索证书。但是,要使用此服务,必须在使用任何 JAVA RACF 类之前获得对于 R_datalib 的权限。有关如何设置必需权限的更多信息,请参阅 OS/390® Security Server Callable Services Guide。
CMS 密钥库
可以在 CMS 密钥库中设置一些特定于提供程序的属性。
![[z/OS]](../images/ngzos.gif)
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
<keyStores xmi:id="KeyStore_1132071489571" name="CMSKeyStore"
password="{xor}HRYNFAtrbxEwOzpvbhw6MzM=" provider="IBMCMSProvider"
location="${USER_INSTALL_ROOT}\profiles\AppSrv01/config/cells/myhostCell01
/nodes/myhostNode01/servers/webserver1/plugin-key.kdb" type="CMSKS"
fileBased="true" createStashFileForCMS="true"
managementScope="ManagementScope_1132071489569"/>
<keyStores xmi:id="KeyStore_1132071489571" name="CMSKeyStore"
password="{xor}HRYNFAtrbxEwOzpvbhw6MzM=" provider="IBMi5OSJSSEProvider"
location="${USER_INSTALL_ROOT}\profiles\AppSrv01/config/cells/myhostCell01
/nodes/myhostNode01/servers/webserver1/plugin-key.kdb" type="IBMi5OSKeyStore"
fileBased="true" createStashFileForCMS="true"
managementScope="ManagementScope_1132071489569"/>
![[IBM i]](../images/iseries.gif)
![[IBM i]](../images/iseries.gif)
硬件加密密钥库
要了解加密设备配置,请参阅使用密码时的密钥管理。
可以通过定制属性 com.ibm.ssl.keyStoreSlot 或者配置属性 slot="0" 来添加槽。将在读取定制属性 (property) 之后再读取属性 (attribute) 以保持向后兼容性。