keytool生成私钥、公钥、证书详解

转载 2016年08月03日 17:15:18

★ 实例说明 
本实例使用J2SDK提供的keytool工具用默认的密钥库和算法创建几个数字证书。

 

★运行程序
keytool程序运行时加上命令行参数–genkey即可。
在命令行中输入“keytool   –genkey”将自动使用默认的算法生成公钥和私钥,并以交互方式获得公钥持有者的信息。其交互过程如下,其中带下划线的字符为用户键盘输入的内容,其他为系统提示的内容

C:/>keytool -genkey
输入keystore密码:  123456
您的名字与姓氏是什么?
[Unknown]: Yumi
您的组织单位名称是什么?
[Unknown]: Yumi
您的组织名称是什么?
[Unknown]:   Yumi
您所在的城市或区域名称是什么?
[Unknown]:   SH
您所在的州或省份名称是什么?
[Unknown]: SH
该单位的两字母国家代码是什么
[Unknown]:   CN
CN=Yumi, OU=Yumi, O=Yumi, L=SH, ST=SH, C=CN 正确吗?
[否]:   是
输入的主密码
(如果和 keystore 密码相同,按回车):   123456
C:/>

以上操作将生成一个公钥和一个私钥,这里并未指定使用何算法,将使用默认的DSA算法。

同时上述操作将创建一个数字证书,证书中包含了新生成的公钥和一个名字为“CN=Yumi, OU=Yumi, O=Yumi, L=SH, ST=SH, C=CN”的主体(人或机构)的对应关系。其中“CN=Yumi, OU=Yumi, O=Yumi, L=SH, ST=SH, C=CN”是X.500格式的全名,包含了主体的国家、州、城市、机构、单位和名字。这样,这个证书将证明相应的公钥是这个人或机构所拥有的。

以上生成的公钥、私钥和证书都保存在用户的主目录中创建一个默认的文件“.keystore”中。如果是Windows 2000系统,用户主目录是c:/ Documents and Setting/用户名。

由于“.keystore”中包含了私钥,所以是一个需要保密的文件,因此上述操作提示为该文件设置一个密码:“输入keystore密码”,这里因为是第一次使用该密钥库,因此输入的密码“123456”将成为该默认的密钥库的密码(实际使用时应该设置复杂的口令)。以后再使用这个密钥库时必须提供这个口令才可以使用。

以上操作最后还提示“输入的主密码”,这里“mykey”是默认的别名,使用该名字可以在密钥库“.keystore”中找到对应的公钥、私钥和证书。此处输入的密码是对应于该别名的私钥的密码,密钥库中每个别名可以使用不同的密码加以保护。

1.1.2 使用别名
    密钥库中可以存放多个条目(公钥/私钥对和证书),它们在密钥库中以别名(alias)区分。1.1.1小节在使用keytool工具时没有指定别名,因此系统使用了默认的别名mykey。如果再次运行“keytool –genkey”,则系统将提示“keytool错误: Java.lang.Exception: 没有创建键值对,别名 已经存在”,因此当密钥库中有多个公钥/私钥对和证书时,应该使用别名。

★ 实例说明
本实例使用J2SDK提供的keytool工具用在默认的密钥库中利用别名增加多个证书。

★运行程序
keytool程序运行时加上命令行参数–alias即可。

在命令行中输入“keytool   –genkey   –alias   yumi”将自动使用默认的算法生成别名为yumi的公钥和私钥,并以交互方式获得公钥持有者的信息。其交互过程如下:


C:/>keytool -genkey -alias yumi
输入keystore密码:  123456
后面部分与上一实例相同


其中“输入keystore密码:”后面输入的内容必须和1.1.1小节相同的密码,否则将无法访问密钥库,并提示如下错误:“keytool错误: java.io.IOException: Keystore was tampered with, or password was incorrect”,这是因为1.1.1小节已经为默认的密钥库设置了该密码,以后使用该密钥库都必须提供该密码

        在“输入 的主密码”的提示后这里不妨直接按“回车键”,这样该私钥将使用和密钥库相同的密码“123456”来保护

        以上操作将在用户主目录的“.keystore”文件中增加一对公钥和私钥(DSA算法),同时增加一个数字证书,证书中包含了新生成的公钥和一个名字为“CN=Yumi, OU=Yumi, O=Yumi, L=SH, ST=SH, C=CN”的主体(人或机构)的对应关系

1.1.3 使用指定的算法和密钥库和有效期

1.1.1和1.1.2小节中使用的是默认的算法和密钥库,本节介绍如何自己指定算法和密钥库
★ 实例说明
本实例使用J2SDK提供的keytool工具用RSA算法和在指定的密钥库mykeystore中创建公钥/私钥对和证书

★运行程序
keytool的-keyalg参数可以指定密钥的算法,如果需要指定密钥的长度,可以再加上-keysize参数。密钥长度默认为1024位,使用DSA算法时,密钥长度必须在512到1024之间,并且是64的整数倍

Keytool的-keystore参数可以指定密钥库的名称。密钥库其实是存放密钥和证书的文件,密钥库对应的文件如果不存在自动创建

-validity参数可以指定所创建的证书有效期是多少天

如在命令行中输入“keytool -genkey -alias mytest -keyalg RSA -keysize 2048 -keystore mykeystore -validity 4000”将使用RSA算法生成2048位的公钥/私钥对及整数,密钥长度为2048位,证书有效期为4000天。使用的密钥库为mykeystore文件

C:/java/jdk/bin>keytool -genkeypair -alias "yumi" -keyalg "RSA" -keysize 2048 -keystore "D://local.keystore" -validity 4000

输入keystore密码:   123456
下面部分与上一实例相同

以上操作将在D盘下建立文件名为local.keystore的文件,并提示输入一个密码加以保护:“输入keystore密码:”。这里不妨设置为“123456”。这样,以后再使用这个密钥库文件时必须提供该密码
        对其中的“输入的主密码”,这里不妨直接按回车键,这样mykeysotre文件中的mytest条目将使用和密钥库相同的密码:“123456”。
1.2.1 使用Keytool将数字证书导出到文件

★ 实例说明
本实例使用J2SDK提供的keytool工具将指定的证书从密钥库导出为编码过和没编码过两种格式的文件。
★运行程序
使用keytool的-export参数可以将别名指定的证书导出到文件,文件名通过file参数指定。如输入如下命令

C:/java/jdk/bin>keytool -export -alias yumi -file D://yumi.cer

则将默认密钥库中的yumi条目对应的证书导出到文件yumi.cer中。由于命令行中没有用storepass给出密码,因此屏幕提示输入keystore密码。由于证书中不包含私钥,因此不需要条目的主密码

该操作完成后将在D盘中创建yumi.cer文件,该文件即是默认密钥库中的yumi条目对应的证书,它包含了公钥和主体的对应关系,内容也可以公开。
输入如下命令则可以指定密钥库

C:/java/jdk/bin>keytool -export -alias yumi -file D://yumi.cer -keystore D://local.keystore
该操作完成后将在D盘中创建yumi.cer文件

        如果用文本编辑器打开yumi.cer,将会发现它是二进制文件,有些内容无法显示,这不利于公布证书。在导出证书时加上-rfc参数则可以使用一种可打印的编码格式来保存证书。如

C:/java/jdk/bin>keytool -export -alias yumi -file D://yumiRfc.cer -keystore D://local.keystore -rf

保存在文件中的认证 
则D盘下将增加一个文件yumiRfc.cer,其内容是编码过的,可以在屏幕上显示、拷贝或打印。


1.2.2 使用Keytool从文件中显示证书

★ 实例说明
本实例使用J2SDK提供的keytool工具将1.2.3小节导出的证书文件显示出来。
★运行程序
使用keytool的-printcert参数可以将1.2.3小节导出到证书文件详细内容显示出来,文件名称通过-file参数指定。如:

C:/java/jdk/bin>keytool -printcert -file   D://yumi.cer


1.2.3 在Windows中从文件显示证书
★ 实例说明
本实例在Windows中直接显示1.2.1小节导出的证书文件。
★运行程序
1.2.3小节导出的证书文件中,只要文件名以.cer为后缀,Windows操作系统就可以直接识别。如在Windows中双击yumi.cer图标,将出现窗口。其中包含了证书的所有者、颁发者、有效期等信息,这些信息和使用keytool显示出的信息一致。
由于该证书是用自己的私钥对该证书进行数字签名的,即自己给自己签发的证书,因此窗口中显示警告信息:“该证书发行机构根证书没受信任”。






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

网上有非常多的相关教程,均大同小异。有些博主写得过于细致,有些又写得过于粗枝大叶。正好这次在工作中又需要进行RSA非对称的相关开发,所以自己整理一遍。 1、工具 Java自带的工具keytool可...
  • freezingxu
  • freezingxu
  • 2017年05月10日 16:34
  • 4169

使用keytool生成私钥private key 即keystore文件

http://developer.android.com/guide/publishing/app-signing.html#ExportWizard中写到: keytool -genkey -...
  • houshunwei
  • houshunwei
  • 2012年06月15日 10:59
  • 6208

使用java 的keytool生成RSA 公钥 私钥 (含代码验证)

keytool的使用 keytool程序由JDK提供,可以生成、查看证书和key.而keystore是key的容器,可以容纳多个key及相关信息。 每一条key由一个别名alias引用。可以把ke...
  • FanShangLuoShi
  • FanShangLuoShi
  • 2016年10月10日 14:15
  • 1385

私钥、公钥、数字签名、数字证书、HTTPS

加密:公钥加密,私钥解密      认证:私钥加密,公钥解密      如果A给B发送一个加密的有数字签名的文件,会怎么样呢?      首先A有自己的公钥和私钥:A_public_key, A_...
  • u013401853
  • u013401853
  • 2016年10月10日 19:47
  • 3691

keytool生成私钥、公钥、证书详解

我这里也转载一下 ★ 实例说明  本实例使用J2SDK提供的keytool工具用默认的密钥库和算法创建几个数字证书。 ★运行程序 keytool程序运行时加上命令行参数–genkey即可。 ...
  • yu829
  • yu829
  • 2014年03月01日 22:20
  • 3374

数字证书、公钥和私钥这三者之间的关系是什么

根据非对称密码学的原理,每个证书持有人都有一对公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由证书持人自己持有,并且必须妥善保管和注意保密。数字证书则是由证书认证机构(CA)...
  • a351945755
  • a351945755
  • 2014年03月26日 00:56
  • 9792

公钥,私钥,数字签名,数字证书详解

 1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥。 2. 鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。 3. 苏珊要给鲍勃写一封保密的信。她写完后用...
  • sum_rain
  • sum_rain
  • 2014年07月04日 16:16
  • 4818

Git - - - Git (如何生成git的公钥和私钥 )

git
  • tony2278
  • tony2278
  • 2016年10月14日 10:17
  • 1021

一步一步 搞定RSA(公钥、私钥)

首先我们要会生成RSA密钥文件,现在一步步的来给大家展示一下,如何生成我们所需的公钥和私钥文件: RSA密钥生成过程 生成私钥文件 $ openssl genrsa -out private.pe...
  • yi_zz32
  • yi_zz32
  • 2015年11月29日 16:36
  • 27740

银行接口的私钥和公钥详解

银行接口的私钥和公钥详解 中国银行、建设银行、农业银行、工商银行、招商银行等支付接口的私钥和公钥详解 密钥: 我理解是公钥+私钥的统称。 密钥对: 公钥(证书)和私钥成对存在。 ...
  • a351945755
  • a351945755
  • 2014年04月02日 09:48
  • 6486
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:keytool生成私钥、公钥、证书详解
举报原因:
原因补充:

(最多只允许输入30个字)