11.13.2. 创建一个 Java 密钥库来存储敏感信息
前提条件
keytool
命令必须可用。它时 JRE 提供的命令。请找到这个文件所在的位置,在红帽企业版 Linux 里,它是/usr/bin/keytool
。
过程 11.41. 设置 Java 密钥库
创建一个目录来存储你的密钥库和其他加密的信息。
创建一个目录来存储你的密钥库和其他加密的信息。这个过程的剩余部分将假设这个目录是EAP_HOME/vault/
。既然这个目录将包含敏感信息,它应该只能被有限的用户访问。至少运行 JBoss EAP 的用户帐号需要读-写权限。确定
keytool
要使用的参数。确定下列参数:- alias
- 别名是 vault 或其他存储在密钥库里的数据的唯一标识符。这个过程结尾的命令示例里的别名是
vault
。别名是区分大小写的。 - keyalg
- 用于加密的算法。这个过程里的例子使用了
RSA
。请查看你的 JRE 和操纵系统的文档,看那种选择是可用的。 - keysize
- 加密密钥的大小影响了通过 brute force 解密的难度。这个过程里的例子使用了
2048
。关于合适的值的信息,请参考keytool
所附带的文档。 - keystore
- 密钥库是一个保存加密信息以及如何解密的信息的数据库。如果你没有指定密钥库,默认的密钥库是你的主目录下的
.keystore
。当第一次添加数据到密钥库时,它会被创建。这个过程里的例子使用了vault.keystore
密钥库。
keytool
命令有很多其他选项。更多的细节,请参考你的 JRE 或操纵系统的文档。确定
keystore
命令会询问的问题的答案。keystore
需要下列信息来填充密钥库条目:- 密钥库密码
- 当你创建一个密钥库时,你必须设置密码。为了和将来的密钥库一起使用,你需要提供密码。请选择一个你可以记住的强密码。密钥库的安全性取决于密码以及它所在的文件系统和操纵系统的安全性。
- 密钥密码(可选)
- 除了密钥库密码,你可以为每个保存的密钥指定一个密码。每次使用这个密钥时都需要输入密码。通常这个功能不会被使用。
- 名和姓
- 这和列表里余下的信息可以有助于唯一标识密钥并将其放入一个其他密钥的层次结构里。它完全可以不是一个名字,但应该是两个单词,而且是唯一的。这个过程里的例子使用了
Accounting Administrator
。按照目录的术语,它成为了证书的通用名称(common name)。 - 机构内部门(Organizational unit)
- 这是一个标识谁在使用证书的单词。它可以是应用程序或商业单元。这个过程里的例子使用了
AccountingServices
。通常,组或应用程序使用的所有密钥库都使用相同的机构内部门。 - 机构
- 这通常是一个代表你的机构名称的单词。它通常在机构使用的所有证书里都保持相同。这个例子使用了
MyOrganization
。 - 城市或自治区
- 你的城市
- 州或省
- 你的州或省,或者相等的地区
- 国家
- 两个字母的国家代码
所有这些信息将创建一个密钥库和证书的层次结构,确保它们使用一致而唯一的命名结构。运行
keytool
命令,提供你收集的信息。例 11.39.
keystore
命令的输入和输出的例子。$ keytool -genseckey -alias vault -storetype jceks -keyalg AES -keysize 128 -storepass vault22 -keypass vault22 -validity 730 -keystore
EAP_HOME/vault/
vault.keystore Enter keystore password: vault22 Re-enter new password:vault22 What is your first and last name? [Unknown]:Accounting Administrator
What is the name of your organizational unit? [Unknown]:AccountingServices
What is the name of your organization? [Unknown]:MyOrganization
What is the name of your City or Locality? [Unknown]:Raleigh
What is the name of your State or Province? [Unknown]:NC
What is the two-letter country code for this unit? [Unknown]:US
Is CN=Accounting Administrator, OU=AccountingServices, O=MyOrganization, L=Raleigh, ST=NC, C=US correct? [no]:yes
Enter key password for <vault> (RETURN if same as keystore password):
结果
在 EAP_HOME/vault/
目录里创建了一个名为 vault.keystore
的文件。它保存了一个名为 vault
的密钥,这个密钥将用来为 JBoss EAP 6 保存加密字符串,如密码。