介绍
Java Keytool是用于操作Java Keystore的密钥和证书管理工具,并且包含在Java中。 Java密钥库是授权证书或公钥证书的容器,并且经常被基于Java的应用程序用于加密,身份验证和通过HTTPS提供服务。其条目受密钥库密码保护。密钥库条目由一个
别名标识,它由形成一个信任链密钥和证书。 这小抄式指南提供了一个快速参考
keytool
使用Java密钥库时的一些很常用的命令。这包括创建和修改Java密钥库,以便它们可以与您的Java应用程序一起使用。
如何使用本指南:
- 如果你不熟悉的证书签名请求(CSR),请阅读我们的CSR区域OpenSSL的小抄
- 本指南是一个简单的,cheat表格格式 - 自包含的命令行片段
- 跳转到,是有关你正在尝试完成的任务的任何部分(提示:使用的左下角或浏览器的查找功能的内容菜单)
- 大多数命令是已扩大到多行(使用单行
\
符号)为清楚起见
创建和导入密钥库条目
本节介绍与生成密钥对和证书以及导入证书相关的Java Keytool命令。
在新建/现有密钥库中生成密钥
如果要使用HTTP(HTTP over TLS)来保护Java应用程序,请使用此方法。这将在新的或现有的Java密钥库中创建一个新密钥对,可用于创建CSR,并从证书颁发机构获取SSL证书。 此命令生成一个2048位RSA密钥对,指定别名(下
domain
),在指定的密钥库文件(
keystore.jks
):
keytool -genkeypair \
-alias domain \
-keyalg RSA \
-keystore keystore.jks
如果指定的密钥库不存在,则将在提供请求的信息后创建密钥库。这将提示输入密钥库密码(新密码或现有密码),然后是专有名称提示(对于私钥),然后是所需的私钥密码。
为现有私钥生成CSR
如果要生成可发送到CA以请求签发CA签署的SSL证书的CSR,请使用此方法。它要求密钥库和别名已经存在;您可以使用上一个命令来确保这一点。 此命令创建一个CSR(
domain.csr
由别名(标识的私钥签名)
domain
在()
keystore.jks
)密钥库:
keytool -certreq \
-alias domain \
-file domain.csr \
-keystore keystore.jks
输入密钥库的密码后,将生成CSR。
导入签名/根/中间证书
如果要将签署的证书(例如由CA签发的证书)导入到密钥库中,请使用此方法;它必须匹配指定别名中存在的私钥。您也可以使用同样的命令导入
根或您的CA可能需要完成信任链
中间证书。 只需指定一个唯一的别名,如
root
,而不是
domain
,并且要导入证书。 该命令将导入证书(
domain.crt
)到密钥库(
keystore.jks
),指定别名(下
domain
)。如果要导入签名的证书,它必须对应于指定别名中的私钥:
keytool -importcert \
-trustcacerts -file domain.crt \
-alias domain \
-keystore keystore.jks
将提示您输入密钥库密码,然后确认导入操作。
注意:您还可以使用命令导入CA的证书到Java信任,它通常位于
$JAVA_HOME/jre/lib/security/cacerts
假定
$JAVA_HOME
是安装在JRE或JDK的地方。
在新建/现有密钥库中生成自签名证书
如果要为Java应用程序生成自签名证书,请使用此命令。这实际上是用于创建新密钥对的命令,但有效期限以天为单位指定。 此命令生成一个2048位RSA密钥对,有效期为
365
天,指定别名(下
domain
),在指定的密钥库文件(
keystore.jks
):
keytool -genkey \
-alias domain \
-keyalg RSA \
-validity 365 \
-keystore keystore.jks
如果指定的密钥库不存在,则将在提供请求的信息后创建密钥库。这将提示输入密钥库密码(新密码或现有密码),然后是专有名称提示(对于私钥),然后是所需的私钥密码。
查看密钥库条目
本部分涵盖了列出Java密钥库的内容,例如查看证书信息或导出证书。
列出密钥存储库证书指纹
该命令列出了所有的证书的SHA指纹密钥库中(
keystore.jks
),它们各自的别名下:
keytool -list \
-keystore keystore.jks
系统将提示您输入密钥库的密码。您也可以通过限制输出到一个特定的别名
-alias domain
选项,其中“域”是别名。
列出详细密钥库内容
该命令列出关于密钥库(条目详细信息
keystore.jks
)收录包括证书链的长度,链中的证书,专有名称,序列号的指纹,并创建/到期日,其各自的别名下:
keytool -list -v \
-keystore keystore.jks
系统将提示您输入密钥库的密码。您也可以通过限制输出到一个特定的别名
-alias domain
选项,其中“域”是别名。
注意:您也可以使用这个命令来查看哪些证书是在Java信任,它通常位于
$JAVA_HOME/jre/lib/security/cacerts
假定
$JAVA_HOME
是安装在JRE或JDK的地方。
使用Keytool查看证书信息
此命令打印有关证书文件(详细信息
certificate.crt
),包括其指纹,所有者和发行人,以及其有效性的时间周期的专有名称:
keytool -printcert \
-file domain.crt
系统将提示您输入密钥库密码。
导出证书
此命令导出一个二进制DER编码的证书(
domain.der
),与该别名(关联
domain
),在密钥库(
keystore.jks
):
keytool -exportcert
-alias domain
-file domain.der
-keystore keystore.jks
系统将提示您输入密钥库密码。如果你想DER编码证书PEM编码转换,按照我们的
OpenSSL的小抄 。
修改密钥库
本节介绍Java Keystore条目的修改,例如删除或重命名别名。
更改密钥库密码
该命令用于更改密钥库(的密码
keystore.jks
):
keytool -storepasswd \
-keystore keystore.jks
将提示您输入当前密码,然后输入新密码。你还可以通过使用在命令中指定的新的密码
-new newpass
选项,其中“newpass”是密码。
删除别名
这个命令是用来删除别名(
domain
密钥仓库中的()
keystore.jks
):
keytool -delete \
-alias domain \
-keystore keystore.jks
系统将提示您输入密钥库密码。
重命名别名
此命令将重命名别名(
domain
)到目标别名(
newdomain
密钥库中的()
keystore.jks
):
keytool -changealias \
-alias domain \
-destalias newdomain \
-keystore keystore.jks
系统将提示您输入密钥库密码。
结论
这应该涵盖大多数人使用Java Keytool来操纵他们的Java Keystore。它有许多其他用途没有在这里涵盖,所以随时提出或建议其他用途在评论。 本教程是基于版本的密钥库附带的Java 1.7.0更新65.在Ubuntu上安装Java的帮助,请按照
本指南 。