使用 keytool 可以设置和使用 JSSE(Java Secure Socket Extension,Java 安全套接口扩展)数字证书。在开发者配置文件中,Application Server 在服务器端使用 JSSE 格式来管理证书和密钥库。在所有配置文件中,客户端(应用程序客户端或独立客户端)使用 JSSE 格式。
J2SE SDK 附带了 keytool,因而允许管理员管理公共/专用密钥对和关联证书。还允许用户高速缓存正与其通信的另一方的公共密钥(以证书形式)。
要运行 keytool,必须先配置 shell 环境以使 J2SE /bin 目录位于路径中;或者必须在命令行中提供此工具的完整路径。有关 keytool 的更多信息,请参见 http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/keytool.html 上的 keytool 文档。
以下示例说明了使用 JSSE 工具处理证书的相关用法:
使用 RSA 密钥算法在 JKS 类型的密钥库中创建自签名证书。RSA 是 RSA Data Security, Inc. 开发的公共密钥加密技术。RSA 缩略词分别代表该技术的三位发明者:Rivest、Shamir 和 Adelman。
keytool -genkey -noprompt -trustcacerts -keyalg RSA -alias ${cert.alias} -dname ${dn.name} -keypass ${key.pass} -keystore ${keystore.file} -storepass ${keystore.pass} |
使用 keytool 实用程序生成证书中显示了创建证书的另一个示例。
使用默认密钥算法在 JKS 类型的密钥库中创建自签名证书。
keytool -genkey -noprompt -trustcacerts -alias ${cert.alias} -dname ${dn.name} -keypass ${key.pass} -keystore ${keystore.file} -storepass ${keystore.pass} |
使用 keytool 实用程序为数字证书签名中显示了一个为证书签名的示例。
显示 JKS 类型的密钥库中可用的证书。
keytool -list -v -keystore ${keystore.file} -storepass ${keystore.pass} |
显示 JKS 类型的密钥库中的证书信息。
keytool -list -v -alias ${cert.alias} -keystore ${keystore.file} -storepass ${keystore.pass} |
将 RFC/文本格式的证书导入 JKS 库。通常,使用 Internet RFC(Request for Comments,请求注释)1421 标准定义的可打印编码格式(而非其二进制编码)来存储证书。此证书格式也称为 Base 64 编码,便于通过电子邮件或某些其他机制将证书导出到其他应用程序。
keytool -import -noprompt -trustcacerts -alias ${cert.alias} -file ${cert.file} -keystore ${keystore.file} -storepass ${keystore.pass} |
以 PKCS7 格式从 JKS 类型的密钥库中导出证书。公共密钥加密标准 #7 加密消息语法标准定义的回复格式包括发布的证书以及支持证书链。
keytool -export -noprompt -alias ${cert.alias} -file ${cert.file} -keystore ${keystore.file} -storepass ${keystore.pass} |
以 RFC/文本格式从 JKS 类型的密钥库中导出证书。
keytool -export -noprompt -rfc -alias ${cert.alias} -file ${cert.file} -keystore ${keystore.file} -storepass ${keystore.pass} |
从 JKS 类型的密钥库中删除证书。
keytool -delete -noprompt -alias ${cert.alias} -keystore ${keystore.file} -storepass ${keystore.pass} |
使用 keytool 实用程序删除证书中显示了从密钥库中删除证书的另一个示例。
使用 keytool 可以生成、导入和导出证书。默认情况下,keytool 将在其运行所在的目录中创建一个密钥库文件。
转至要运行证书的目录。
始终在包含密钥库和信任库文件的目录中生成证书,默认目录为 domain-dir/config。有关更改这些文件位置的信息,请参见更改证书文件的位置。
输入以下 keytool 命令以在密钥库文件 keystore.jks 中生成证书:
keytool -genkey -alias keyAlias-keyalg RSA -keypass changeit -storepass changeit -keystore keystore.jks |
使用任一唯一的名称作为您的 keyAlias。如果您已更改密钥库或专用密钥密码的默认值,请将以上命令中的 changeit 替换为新密码。默认的密钥密码别名为 "s1as"。
将显示一个要求您输入姓名、组织和其他信息的提示,keytool 将使用这些信息来生成证书。
输入以下 keytool 命令以将生成的证书导出到文件 server.cer(或 client.cer,如果您愿意):
keytool -export -alias keyAlias-storepass changeit -file server.cer -keystore keystore.jks |
如果要求证书授权机构签名的证书,请参见使用 keytool 实用程序为数字证书签名。
要创建信任库文件 cacerts.jks 并将证书添加到信任库中,请输入以下 keytool 命令:
keytool -import -v -trustcacerts -alias keyAlias -file server.cer -keystore cacerts.jks -keypass changeit |
如果您已更改密钥库或专用密钥密码的默认值,请将以上命令中的 changeit 替换为新密码。
工具将显示有关证书的信息并提示您是否要信任该证书。
键入 yes,然后按 Enter 键。
然后,keytool 将显示与下面类似的信息:
Certificate was added to keystore [Saving cacerts.jks] |
重新启动 Application Server。
创建数字证书之后,拥有者必须为其签名以防止伪造。电子商务站点或身份验证对其很重要的那些站点可以从知名的证书授权机构 (CA) 购买证书。如果无需考虑验证,例如当专用安全通信可以满足全部需求时,则可节省获取 CA 证书所花费的时间和费用并使用自签名证书。
按照 CA Web 站点上的说明进行操作来生成证书密钥对。
下载生成的证书密钥对。
将证书保存在包含密钥库和信任库文件的目录中,默认目录为 domain-dir/config。请参见更改证书文件的位置。
在 shell 中,转至包含证书的目录。
使用 keytool 将证书导入到本地密钥库和本地信任库(如有必要)。
keytool -import -v -trustcacerts -alias keyAlias -file server.cer -keystore cacerts.jks -keypass changeit -storepass changeit |
如果密钥库或专用密钥密码不是默认密码,请将以上命令中的 changeit 替换为新密码。
重新启动 Application Server。
要删除现有证书,请使用 keytool -delete 命令,例如:
keytool -delete -alias keyAlias -keystore keystore-name -storepass password