from  http://blog.csdn.net/xueyepiaoling/article/details/6524200

如果对keytool生成的密钥库的概念不清楚,对密钥库中存放的是什么不了解,可以看一下下面这篇文章,概念会清楚很多

http://hi.baidu.com/luckydogs888/blog/item/2a674c4f2cb02b30afc3ab2f.html

我这里也转载一下

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

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

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

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

同时上述操作将创建一个数字证书,证书中包含了新生成的公钥和一个名字为“CN=Liao Weimin1, OU=Network Center, O=Guangzhou University, L=ZB, ST=Guangzhou, C=CN”的主体(人或机构)的对应关系。其中“CN=Liao Weimin1, OU=Network Center, O=Guangzhou University, L=ZB, ST=Guangzhou, 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   liaoweimin2”将自动使用默认的算法生成别名为liaoweimin2的公钥和私钥,并以交互方式获得公钥持有者的信息。其交互过程如下:

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

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

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

以上操作将在用户主目录的“.keystore”文件中增加一对公钥和私钥(DSA算法),同时增加一个数字证书,证书中包含了新生成的公钥和一个名字为“CN=Liao Weimin2, OU=Network Center, O=Guangzhou University, L=ZB, ST=Guangzhou, 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 1024 keystore mykeystore validity 4000”将使用RSA算法生成1024位的公钥/私钥对及整数,密钥长度为1024位,证书有效期为4000天。使用的密钥库为mykeystore文件。

C:/java/ch5 > keytool genkey alias mytest keyalg RSA keysize  1024  keystore mykeystore validity  4000

输入keystore密码:   wshr.ut

您的名字与姓氏是什么?

[Unknown]:   Liao Weimin

您的组织单位名称是什么?

[Unknown]:   Network Center

您的组织名称是什么?

[Unknown]:   Guangzhou University

您所在的城市或区域名称是什么?

[Unknown]:   ZB

您所在的州或省份名称是什么?

[Unknown]:   Guangzhou

该单位的两字母国家代码是什么

[Unknown]:   CN

CN = Liao Weimin, OU = Network Center, O = Guangzhou University, L = ZB, ST = Guangzhou, C = CN 正确吗?

[否]:   是

输入的主密码
(如果和 keystore 密码相同,按回车):

C:/java/ch5 >

由于当前目录下没有mykeystore文件,因此以上操作将在当前目录建立文件名为mykeystore的文件,并提示输入一个密码加以保护:“输入keystore密码:”。因为这里使用的密钥库和1.1.1小节及1.1.2小节不是同一个文件,因此这里输入的密码和1.1.1小节及1.1.2小节没有必要一致,这里不妨设置为“wshr.ut”。这样,以后再使用这个密钥库文件时必须提供该密码。
        对其中的“输入的主密码”,这里不妨直接按回车键,这样mykeysotre文件中的mytest条目将使用和密钥库相同的密码:“wshr.ut”。
1.2.1 使用Keytool将数字证书导出到文件

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

C:/java/ch5 > keytool export alias liaoweimin2  - file liaoweimin2.cer

输入keystore密码:   123456

保存在文件中的认证

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

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

C:/java/ch5 > keytool export alias lf file lf.cer keystore lfkeystore –storepass wshr.ut

保存在文件中的认证 
该操作完成后将在当前目录中创建lf.cer文件。

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

C:/java/ch5 >  keytool export alias mytest file mytest.cer   keystore mykeystore   - storepass wshr.ut  - rfc

保存在文件中的认证 
则当前目录下将增加一个文件mytest.cer,其内容是编码过的,可以在屏幕上显示、拷贝或打印。如图5-2所示。(打印内容不同)

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

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

C:/java/ch5 > keytool printcert file   lf.cer

(见自己的屏幕)
对编码过的证书可以同样显示,如:

C:/java/ch5 > keytool printcert file   mytest.cer

(见自己的屏幕)

1.2.3 在Windows中从文件显示证书
★ 实例说明

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

keytool生成私钥、公钥、证书详解相关推荐

  1. 数字证书、数字签名的实现使用以及keytool工具生成私钥公钥

    数字证书.数字签名的实现使用以及keytool工具生成私钥公钥 数字签名 数字证书 数字签名的实现 keytool工具 基本命令 生成私钥公钥 导出公钥 数字签名 数字签名(又称公钥数字签名)是只有信 ...

  2. 【可食用】KeyTool生成KeyStore,证书、公钥、私钥文档JAVA生成,JAVA实现ECC签名验签

    KeyTool生成KeyStore,证书.公钥.私钥文档JAVA生成,JAVA实现ECC签名验签 一.首先我们可以写个工具类生成密钥对.证书.公钥.私钥文本 jksAndCerGenerator.ja ...

  3. BTC公钥生成地址的过程详解

    BTC公钥生成地址的过程详解 首先简单介绍一下,BTC助记词以及种子和公私钥之间的关系:BTC助记词生成种子,种子生成私钥,私钥生成公钥,公钥生成地址. 本文主要的内容是介绍公钥生成地址的这一过程: ...

  4. http\https的连接过程及数字证书详解

    http\https的连接过程及数字证书详解 内推军p185 http连接过程(相当于输入url会发生什么) 1.域名解析 2.发起TCP的三次握手 3.Web浏览器向服务器发送http请求命令 4. ...

  5. SSL证书详解和CFSSL工具使用

    SSL证书详解和CFSSL工具使用 1.公钥基础设施PKI基础概念 CA(Certification Authority)证书,指的是权威机构给我们颁发的证书. 密钥就是用来加解密用的文件或者字符串. ...

  6. IOS开发环境更换后重新制作Provisioning Profile证书详解

    IOS开发环境更换后重新制作Provisioning Profile证书详解 新换了台Macbook,又折腾了一遍Provisioning Profile证书,苹果的证书繁锁复杂,每次制作都相当麻烦, ...

  7. python生成表格文件_python 读取excel文件生成sql文件实例详解

    python 读取excel文件生成sql文件实例详解 学了python这么久,总算是在工作中用到一次.这次是为了从excel文件中读取数据然后写入到数据库中.这个逻辑用java来写的话就太重了,所以 ...

  8. php把proto解析为文档,Protobuf 文件生成工具 Prototool 命令详解

    Protobuf 文件生成工具 Prototool 命令详解 简介 Prototool 是 Protobuf 文件的生成工具, 目前支持go, php, java, c#, object c 五种语言 ...

  9. php推荐码生成,最新最全PHP生成制作验证码代码详解(推荐),验证码详解_PHP教程...

    最新最全PHP生成制作验证码代码详解(推荐),验证码详解 1.0 首先先看代码 好,现在结合以上代码,来分析分析以上用到的几个函数: ① imagecreatetruecolor(); imagecr ...

  10. 【Hibernate】hibernate主键生成策略与配置详解

    //####################################################### **Hibernate各种主键生成策略与配置详解** //############# ...

最新文章

  1. python编程分析了一下高考那些事,发现了两个之最,原来是这样
  2. ping 出现(DUP)以及连接虚拟机ssh自动断开
  3. 干货!几招教你降低论文重复率!!
  4. Koa / Co / Bluebird or Q / Generators / Promises / Thunks 的相互关系
  5. excel筛选排序从小到大_excel表格怎么按字数的多少来排列!
  6. Spring Security与Maven教程
  7. c语言循环链表中设立尾链表,C语言实现双向非循环链表(带头结点尾结点)的节点插入...
  8. php集成环境怎么打开,PHP集成开发环境PhpStorm快速入门指南(二):打开一个项目...
  9. 亚太地区数学建模优秀论文_数学建模美赛强势来袭!
  10. ionic 图片加载失败,显示默认图片代替
  11. [原创]物探小宽线坐标快速生成(平行线坐标互算 、点到线距离计算、两线交点计算等)...
  12. iOS协议、代理、Block和回调、类别
  13. 如何通过FTP从Mac快速发送和接收文件
  14. 第一章 简介和古典密码(粗略版) - 现代密码学导论 Introduction to Modern Cryptography
  15. C++ Primer 5th - 1.1 编写一个简单的C++程序
  16. 自定义词库扩展和停止
  17. 【车间调度】基于遗传算法求解车间调度matlab源码
  18. ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
  19. c语言编程实现简单三子棋游戏
  20. Linux:安装AnyConnect客户端教程

热门文章

  1. leetcode416. 分割等和子集
  2. 脑洞全开YY无罪-益智类游戏“脑力大战”引发思考
  3. skpaint matchcharacter 不能显示英文_微信新增6个搞笑小表情!翻白眼,666,裂开,让我看看…英文都咋说?...
  4. #论文阅读# MORAN
  5. 隐私计算头条周刊(11.27-12.3)
  6. 无法加载静态的图片Failed to load resource: the server responded with a status of 404 (Not Found)
  7. 行云管家V4.9正式发布:监控全面提升,首页、主机详情大幅优化,新增大量实用功能.md...
  8. 你处在人生的哪个阶段
  9. Xcode4.6发布了
  10. 杭电网安复试上机编程题