Java keytool的要领:使用Java密钥库工作

介绍

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的帮助,请按照 本指南
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏