介绍
Java Keytool 是一个用于操纵 Java Keystores 的密钥和证书管理工具,并与 Java 一起提供。Java Keystore 是授权证书或公共密钥证书的容器,通常由基于 Java 的应用程序用于加密、身份验证和通过 HTTPS 服务。它的条目由密码密码保护。 密钥条目被一个 alias 标识,并且由构成信任链的密钥和证书组成。
这个 cheat sheet 风格的指南提供了一个快速的参考keytool
命令,这些命令在使用 Java Keystores 时通常是有用的,包括创建和修改 Java Keystores,以便它们可以与您的 Java 应用程序一起使用。
** 如何使用此指南:**
- 如果您不熟悉证书签名请求(CSRs),请阅读我们 [OpenSSL cheat sheet] 的 CSR 部分(https://andsky.com/tech/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs/) *本指南以简单的 cheat sheet 格式 - 包含命令行片段
- 跳到任何与您试图完成任务相关的部分(提示:使用左下方的 Contents 菜单或浏览器的 Find 函数)
- 大多数命令是已扩展到多个行(使用 `` 符号)的单行命令
创建和导入 Keystore 条目
本节涵盖了与生成密钥对和证书以及导入证书相关的Java Keytool命令。
在新/现有 Keystore 中生成密钥
如果您想使用 HTTP (HTTP over TLS) 来保护您的 Java 应用程序,则使用此方法在新的或现有的 Java Keystore 中创建一个新密钥对,可用于创建 CSR,并从证书管理机构获得 SSL 证书。
此命令会生成一个 2048 位 RSA 密钥对,在指定的键盘文件( keystore.jks
)中使用指定的代码(domain
):
1keytool -genkeypair \
2 -alias domain \
3 -keyalg RSA \
4 -keystore keystore.jks
如果指定的键盘已经不存在,它将在提供所要求的信息后创建,这将提示键盘密码(新或现有),随后有一个区别名
提示(对于私钥),然后是所需的私钥密码。
生成现有私钥的CSR
如果您想要生成 CSR,可以将其发送给 CA 以要求 CA 签名的 SSL 证书。
此命令会创建一个 CSR (domain.csr
) 通过键盘(keystore.jks
)中的名称(domain
)识别的私钥签名:
1keytool -certreq \
2 -alias domain \
3 -file domain.csr \
4 -keystore keystore.jks
在输入键盘的密码后,CSR将被生成。
进口签名/根/中间证书
如果您想将签名的证书,例如由 CA 签名的证书,导入您的键盘,则使用此方法;它必须匹配指定的代码中存在的私钥;您也可以使用相同的命令导入 root 或 intermediate 证书,您的 CA 可能需要完成一个信任链条。
此命令将证书(domain.crt
)导入到键盘(keystore.jks
)中,并在指定的名称(domain
)下导入。
1keytool -importcert \
2 -trustcacerts -file domain.crt \
3 -alias domain \
4 -keystore keystore.jks
您将被要求键盘密码,然后确认导入操作。
** 注意:** 您也可以使用该命令将 CA 证书导入您的 Java 信托商店,该商店通常位于$JAVA_HOME/jre/lib/security/cacerts
,假设$JAVA_HOME
是您安装的 JRE 或 JDK 的位置。
在新/现有钥匙商店生成自签证书
如果您想为您的 Java 应用程序生成自签名的证书,则使用此命令,实际上是用来创建新密钥对的相同命令,但有效期为日期。
此命令会生成一个 2048 位 RSA 密钥对,有效期为 365 天,在指定的密码文件( keystore.jks)中使用指定的名称(‘domain’):
1keytool -genkey \
2 -alias domain \
3 -keyalg RSA \
4 -validity 365 \
5 -keystore keystore.jks
如果指定的键盘已经不存在,它将在提供所要求的信息后创建,这将提示键盘密码(新或现有),随后有一个区别名
提示(对于私钥),然后是所需的私钥密码。
查看关键字入口
本节涵盖列出 Java Keystore 的内容,例如查看证书信息或导出证书。
关键字 证书 指纹
此命令列出了 keystore.jks 中的所有证书的 SHA 指纹,分别为:
1keytool -list \
2 -keystore keystore.jks
您还可以通过使用 -alias 域
选项来限制输出到特定的代码,其中域
是代码名称。
关键字 关键字 内容
此命令列出了有关键盘(‘keystore.jks’)包含的条目的详细信息,包括证书链长度、链中的证书的指纹、知名名称、序列号和创建/终止日期,分别为以下字体:
1keytool -list -v \
2 -keystore keystore.jks
您还可以通过使用 -alias 域
选项来限制输出到特定的代码,其中域
是代码名称。
** 注意:** 您也可以使用此命令查看 Java 信托商店中的哪些证书,通常位于$JAVA_HOME/jre/lib/security/cacerts
,假设$JAVA_HOME
是您安装的 JRE 或 JDK 的位置。
使用 Keytool 查看证书信息
此命令打印了有关证书文件(‘certificate.crt’)的信息,包括其指纹、所有者和发行人的知名名称以及其有效期:
1keytool -printcert \
2 -file domain.crt
您将被要求使用 keystore 密码。
出口证书
此命令将一个二进制 DER 编码的证书(‘domain.der’)导出到键盘(‘keystore.jks’)中,该证书与代号(‘domain’)相关联:
1keytool -exportcert
2 -alias domain
3 -file domain.der
4 -keystore keystore.jks
如果您想将 DER 加密证书转换为 PEM 加密,请遵循我们的 OpenSSL 骗局表。
关键字变更
本节涵盖了修改 Java Keystore 条目,例如删除或更名副名。
更改密码密码
此命令用于更改键盘的密码(keystore.jks
):
1keytool -storepasswd \
2 -keystore keystore.jks
您还可以使用-newpass
选项在命令中指定新密码,其中newpass
是密码。
删除 Alias
此命令用于删除键盘(‘keystore.jks’)中的名称(‘域’):
1keytool -delete \
2 -alias domain \
3 -keystore keystore.jks
您将被要求使用 keystore 密码。
改名 阿拉斯
此命令将代号(‘域’)重命名为键盘(‘keystore.jks’)中的目的地代号(‘newdomain’):
1keytool -changealias \
2 -alias domain \
3 -destalias newdomain \
4 -keystore keystore.jks
您将被要求使用 keystore 密码。
结论
这应该涵盖大多数人如何使用Java Keytool来操纵他们的Java Keystores。它有许多其他用途,这些用途在这里没有被涵盖,所以请在评论中询问或建议其他用途。
本教程是基于与 Java 1.7.0 更新 65 搭载的键盘的版本。