您的位置:首页 > 其它

keytool工具生成RSA非对称密钥证书,并导出公钥,私钥文件

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


1、工具

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

下图是在linux环境下,在bin目录下的所有文件:




2、概念

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



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



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



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


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

[plain] view
plain copy

keytool -genkey -alias 你的证书别名 -keyalg 密钥算法 -keystore 证书库文件保存的位置和文件名 -keysize 密钥长度 -validity 证书有效期天数  

解释一下几个参数的含义

-genkey:创建证书

-alias:证书的别名。在一个证书库文件中,别名是唯一用来区分多个证书的标识符

-keyalg:密钥的算法,非对称加密的话就是RSA

-keystore:证书库文件保存的位置和文件名。如果路径写错的话,会出现报错信息。如果在路径下,证书库文件不存在,那么就会创建一个

-keysize:密钥长度,一般都是1024

-validity:证书的有效期,单位是天。比如36500的话,就是100年

所以完整的一条创建命令可能是这样的:

[plain] view
plain copy

keytool -genkey -alias mykey -keyalg RSA -keystore C:/mykeystore.keystore -keysize 1024 -validity 36500  

然后,keytool会要求你输入证书库的密码,而且是连续输入两遍:



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

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



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



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



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

4、查看证书库中的证书

可以使用以下命令来查看一份已存在的证书库中的所有证书

[plain] view
plain copy

keytool -list -keystore /home/freezingxu/mykeystore.keystore  

keytool会要求你输入证书库的密码,注意,是”证书库“的密码,也就是在上述第3步中,首次重复输入两次的那个密码。

然后,keytool就会向你列出这个证书文件里的所有证书,每个证书都是单独的一条记录:



5、导出公钥文件

使用以下命令来从证书库里的某个证书中导出公钥,并保存成一份公钥文件:

[plain] view
plain copy

keytool -export -alias mykey -keystore /home/freezingxu/mykeystore.keystore -file mypublickey.cer  

解释一下:

-export:用于导出公钥文件的命令参数

-alias:你的证书在证书库中的别名,也是唯一标识

-keystore:完整的证书库文件所在的目录及文件名

-file:导出后的公钥文件所在的完整目录及文件名

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



特别需要注意的是,私钥是无法从证书库中导出的,因为那样非常不安全。如果你特别需要私钥或是私钥字符串,只能考虑用编程的方式从密钥库文件中去获取了。

之后,你就会在自己所指定的那个目录下,找到一个cer文件。一般来说你都可以直接双击打开这个文件,其中能够看到你的证书信息以及公钥信息:




5、导出私钥文件

How do I convert a Java Keystore into a PFX or P12
This article explains the process of converting a Java Keystore file, into a PKCS12 file which is a .pfx or .p12 .

 

Requirements - A Java Keystore containing the root, intermediate, and your domain/end entity certificate which was imported by following these
instructions.

 

In order to convert the Java Keystore file into a .pfx or .p12 file, you will need to run the following Java Keytool command:

 

keytool
-v -importkeystore -srckeystore  yourkeystore.keystore -srcalias mykey -destkeystore myp12file.p12 -deststoretype PKCS12


 

Replace
yourkeystore.keystore with the name of your actual java keystore file, and myp12file.p12 file with the name of the .p12 or .pfx file which you would like the command to generate.


 

Enter
destination keystore password: (enter in a password for the  new .pfx/.p12 file)


 

This command will generate your PFX/P12 file (Combination of certificate, private key and certificate chain), which can be used to import the certificate into another server or appliance which accepts PKCS12 files.
至此,使用keytool工具生成证书、RSA密钥对和导出公钥的过程全部完成了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  keystore 公钥 私钥 cer pfx