使用Java自带的keytool工具生成RSA非对称密钥证书,并导出公钥文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/freezingxu/article/details/71547485

网上有非常多的相关教程,均大同小异。有些博主写得过于细致,有些又写得过于粗枝大叶。正好这次在工作中又需要进行RSA非对称的相关开发,所以自己整理一遍。


1、工具

Java自带的工具keytool可以用来生成密钥证书,也可以查看或删除证书库里的证书。无论是windows还是Linux系统,这个工具都会出现在jdk安装目录的bin文件夹下
下图是在linux环境下,在bin目录下的所有文件:


2、概念

keytool工具是基于“证书库”来对密钥进行管理的。“证书库”是一个后缀名为“.keystore”的文件。如下图:

在密钥库中,每一条记录就是一份独立的证书,如果使用RSA算法,那这份证书里就会包含有私钥和公钥,如下图:


keytool工具有很多命令,无论是在windows还是在linux中,你都可以在命令行中输入“keytool”来查看这个工具的用法概述:

keytool的可用命令并不止上图那些。在本篇后续的使用过程中会逐一介绍。

3、创建证书,并保存入证书

keytool -genkey -alias 你的证书别名 -keyalg 密钥算法 -keystore 证书库文件保存的位置和文件名 -keysize 密钥长度 -validity 证书有效期天数
解释一下几个参数的含义
-genkey:创建证书
-alias:证书的别名。在一个证书库文件中,别名是唯一用来区分多个证书的标识符
-keyalg:密钥的算法,非对称加密的话就是RSA
-keystore:证书库文件保存的位置和文件名。如果路径写错的话,会出现报错信息。如果在路径下,证书库文件不存在,那么就会创建一个
-keysize:密钥长度,一般都是1024
-validity:证书的有效期,单位是天。比如36500的话,就是100年
所以完整的一条创建命令可能是这样的:
keytool -genkey -alias mykey -keyalg RSA -keystore C:/mykeystore.keystore -keysize 1024 -validity 36500
然后,keytool会要求你输入证书库的密码,而且是连续输入两遍:

注意这是“证书库”的密码,而不是你所要生成的证书的密码,这是两个不同的密码。
网络上有些文章建议把证书库的密码与证书密码设置成一样的,其实并不建议这么做。

之后,keytool会要求你输入自己的姓名、所在单位/公司/组织的名称、所在城市的名称、所在地区的名称、和2位的国家编码,照着它的引导步骤做就可以了。如果所有信息都输入正确的话,记得在最后输入y,并回车:

最后,keytool会要求你输入证书的密码,也是连续输入两遍。

来看一下完整的过程截图:

完成后,你就会在自己所设定的目录下找到一个后缀名为“.keystore‘的文件,那个文件就是生成的证书库文件了。

4、查看证书库中的证书

可以使用以下命令来查看一份已存在的证书库中的所有证书
keytool -list -keystore /home/freezingxu/mykeystore.keystore
keytool会要求你输入证书库的密码,注意,是”证书库“的密码,也就是在上述第3步中,首次重复输入两次的那个密码。
然后,keytool就会向你列出这个证书文件里的所有证书,每个证书都是单独的一条记录:


5、导出公钥文件

使用以下命令来从证书库里的某个证书中导出公钥,并保存成一份公钥文件:
keytool -export -alias mykey -keystore /home/freezingxu/mykeystore.keystore -file mypublickey.cer
解释一下:
-export:用于导出公钥文件的命令参数
-alias:你的证书在证书库中的别名,也是唯一标识
-keystore:完整的证书库文件所在的目录及文件名
-file:导出后的公钥文件所在的完整目录及文件名

keytool仍然会要求你输入证书库的密码,注意是”证书库“的密码

特别需要注意的是,私钥是无法从证书库中导出的,因为那样非常不安全。如果你特别需要私钥或是私钥字符串,只能考虑用编程的方式从密钥库文件中去获取了。
之后,你就会在自己所指定的那个目录下,找到一个cer文件。一般来说你都可以直接双击打开这个文件,其中能够看到你的证书信息以及公钥信息:


至此,使用keytool工具生成证书、RSA密钥对和导出公钥的过程全部完成了。

没有更多推荐了,返回首页