keytool 学习与实战

1、生成属于自己的私钥/公钥对,这可以通过 keytool -genkeypairs -alias xxx 命令得到。创建密钥对的时候, keytool 会在 keystore 中生成一个新的条目, -alias xxx 选项就是对该条目进行命名。生成密钥对之后,私钥是以原始数据直接储存在 keystore 中的,而公钥是要发布出去的,所以它被封装在一个 X.509 格式的自签名证书中。换句话说,创建密钥对的时候,同时就创建了一个自签名的证书。

将自己假想为一个认证机构,或者说一个只对我自己签发证书的私有认证机构,我称之为 MyCA,先为 MyCA 生成一个自签名的根证书,使用的命令是 keytool -genkeypair -alias MyCA。

D:\JAVA_test>keytool -genkeypair -alias MyCA
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
  [Unknown]:  Han
您的组织单位名称是什么?
  [Unknown]:  Huawei
您的组织名称是什么?
  [Unknown]:  Huawei Enterprise
您所在的城市或区域名称是什么?
  [Unknown]:  Xi‘an
您所在的省/市/自治区名称是什么?
  [Unknown]:  Shaanxi
该单位的双字母国家/地区代码是什么?
  [Unknown]:  CN
CN=Han, OU=Huawei, O=Huawei Enterprise, L=Xi‘an, ST=Shaanxi, C=CN是否正确?
  [否]:  y

输入 <MyCA> 的密钥口令
        (如果和密钥库口令相同, 按回车):

2、查看密钥库,证书的所有者和发布者相同,说明是一个自签名证书。

D:\JAVA_test>keytool -list -v
输入密钥库口令:

密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 1 个条目

别名: myca
创建日期: 2016-8-8
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=Han, OU=Huawei, O=Huawei Enterprise, L=Xi‘an, ST=Shaanxi, C=CN
发布者: CN=Han, OU=Huawei, O=Huawei Enterprise, L=Xi‘an, ST=Shaanxi, C=CN
序列号: 6ff1a447
有效期开始日期: Mon Aug 08 21:18:24 CST 2016, 截止日期: Sun Nov 06 21:18:24 CST 2016
证书指纹:
         MD5: A3:AA:89:E6:45:89:5C:3E:04:C2:9F:DF:8B:8A:56:49
         SHA1: 3C:D3:CD:21:2A:F2:EB:59:4B:9F:C7:8B:67:4F:C0:37:7D:F1:B0:BF
         SHA256: C5:04:B1:A5:5B:30:7C:50:D6:A2:77:71:83:D3:76:B6:55:EE:39:EA:3F:90:A9:ED:5C:DB:0F:0E:1D:2B:F5:79
         签名算法名称: SHA1withDSA
         版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: CD 36 07 46 9E C8 52 AF   70 6D 65 62 F9 98 7A 14  .6.F..R.pmeb..z.
0010: 67 3F C5 D7                                        g?..
]
]

*******************************************
*******************************************

3、然后,再为我自己生成一个密钥对,使用命令 keytool -genkeypair -alias samsara命令,按提示完成操作后,keystore 中就又多了一个samsara条目。

D:\JAVA_test>keytool -genkeypair -alias samsara
输入密钥库口令:
您的名字与姓氏是什么?
  [Unknown]:  samsara
您的组织单位名称是什么?
  [Unknown]:  HH
您的组织名称是什么?
  [Unknown]:  HH wife
您所在的城市或区域名称是什么?
  [Unknown]:  Xi‘an
您所在的省/市/自治区名称是什么?
  [Unknown]:  Shaanxi
该单位的双字母国家/地区代码是什么?
  [Unknown]:  CN
CN=samsara, OU=HH, O=HH wife, L=Xi‘an, ST=Shaanxi, C=CN是否正确?
  [否]:  y

输入 <samsara> 的密钥口令
        (如果和密钥库口令相同, 按回车):

4、查看密钥库,有了两个自签名证书。

D:\JAVA_test>keytool -list -v
输入密钥库口令:

密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 2 个条目

别名: myca
创建日期: 2016-8-8
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=Han, OU=Huawei, O=Huawei Enterprise, L=Xi‘an, ST=Shaanxi, C=CN
发布者: CN=Han, OU=Huawei, O=Huawei Enterprise, L=Xi‘an, ST=Shaanxi, C=CN
序列号: 6ff1a447
有效期开始日期: Mon Aug 08 21:18:24 CST 2016, 截止日期: Sun Nov 06 21:18:24 CST 2016
证书指纹:
         MD5: A3:AA:89:E6:45:89:5C:3E:04:C2:9F:DF:8B:8A:56:49
         SHA1: 3C:D3:CD:21:2A:F2:EB:59:4B:9F:C7:8B:67:4F:C0:37:7D:F1:B0:BF
         SHA256: C5:04:B1:A5:5B:30:7C:50:D6:A2:77:71:83:D3:76:B6:55:EE:39:EA:3F:90:A9:ED:5C:DB:0F:0E:1D:2B:F5:79
         签名算法名称: SHA1withDSA
         版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: CD 36 07 46 9E C8 52 AF   70 6D 65 62 F9 98 7A 14  .6.F..R.pmeb..z.
0010: 67 3F C5 D7                                        g?..
]
]

*******************************************
*******************************************

别名: samsara
创建日期: 2016-8-8
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=samsara, OU=HH, O=HH wife, L=Xi‘an, ST=Shaanxi, C=CN
发布者: CN=samsara, OU=HH, O=HH wife, L=Xi‘an, ST=Shaanxi, C=CN
序列号: 4628176c
有效期开始日期: Mon Aug 08 21:50:29 CST 2016, 截止日期: Sun Nov 06 21:50:29 CST 2016
证书指纹:
         MD5: 89:F8:74:7C:6B:1E:68:7E:DA:D5:EA:8E:E0:06:13:58
         SHA1: 3B:EE:5D:7B:26:D6:B5:41:40:38:A3:BB:8D:28:4F:08:13:8E:1D:19
         SHA256: E3:E2:C4:F8:C6:6C:13:46:CF:66:A9:C9:73:8E:1E:95:D5:E6:B1:07:E2:3F:56:A7:C8:4F:76:9E:04:7D:79:E3
         签名算法名称: SHA1withDSA
         版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 69 4F C7 6A 2B 77 93 D1   F5 BD 97 D7 86 AA 3A 19  iO.j+w........:.
0010: 37 7D CA 56                                        7..V
]
]

*******************************************
*******************************************

5、自签名的证书可以使用,但是总不如认证机构颁发的证书权威。怎么样让 CA 为我们颁发证书呢?首先我们要向 CA 提交申请,提交申请的时候需要提交一份称为 certificate request 的数据。我们可以通过 keytool -certreq 命令针对 keystore 中相应的条目生成该数据。在这里,我想让 CA 给 samsara颁发证书,则使用 keytool -certreq -alias samsara 来生成 certificate request,生成的 certificate request 数据是 Base64 编码的。然后,将该申请提交给 CA。当然,现实中的 CA 那都是要收费的,而且还不便宜。那么我只好自己提交给自己了,使用私有的 MyCA 来给 samsara颁发证书。文件 samsara.cer 就是由 MyCA 颁发的证书。

D:\JAVA_test>keytool -certreq -alias samsara
输入密钥库口令:
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIClTCCAlMCAQAwYDELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB1NoYWFueGkxDjAM
BgNVBAcTBVhpJ2FuMRAwDgYDVQQKEwdISCB3aWZlMQswCQYDVQQLEwJISDEQMA4G
A1UEAxMHc2Ftc2FyYTCCAbgwggEsBgcqhkjOOAQBMIIBHwKBgQD9f1OBHXUSKVLf
Spwu7OTn9hG3UjzvRADDHj+AtlEmaUVdQCJR+1k9jVj6v8X1ujD2y5tVbNeBO4Ad
NG/yZmC3a5lQpaSfn+gEexAiwk+7qdf+t8Yb+DtX58aophUPBPuD9tPFHsMCNVQT
WhaRMvZ1864rYdcq7/IiAxmd0UgBxwIVAJdgUI8VIwvMspK5gqLrhAvwWBz1AoGB
APfhoIXWmz3ey7yrXDa4V7l5lK+7+jrqgvlXTAs9B4JnUVlXjrrUWU/mcQcQgYC0
SRZxI+hMKBYTt88JMozIpuE8FnqLVHyNKOCjrh4rs6Z1kW6jfwv6ITVi8ftiegEk
O8yk8b6oUZCJqIPf4VrlnwaSi2ZegHtVJWQBTDv+z0kqA4GFAAKBgQCFf3rMaT0A
dXgk9Bvw+stZc/nTkWQ1tYTS2jQWFeA+zU4yq9nF1gxmdJhux71gptUtjroPcb0N
PVcQVkld2Vs4i5gitV/fDW+fiC7VGgd9xuRXDJOA/824RnJAvVt0FrRncwVpAx0Z
4nWTuuXpam+CQHudAvknzURIq14z4qJJY6AwMC4GCSqGSIb3DQEJDjEhMB8wHQYD
VR0OBBYEFGlPx2ord5PR9b2X14aqOhk3fcpWMAsGByqGSM44BAMFAAMvADAsAhRX
YlqkUs4sXNOIeUIKesk2AyOiSwIUTRF5ponMvH6QZUrfZfbJH/DYGyU=
-----END NEW CERTIFICATE REQUEST-----

将其保存在samsara.txt文件中,使用-gencert命令生成证书:

D:\JAVA_test>keytool -gencert -alias MyCA -infile samsara.txt -outfile samsara.cer
输入密钥库口令:

查看证书,看其中的发布者和所有者:

D:\JAVA_test>keytool -printcert -v -file samsara.cer
所有者: CN=samsara, OU=HH, O=HH wife, L=Xi‘an, ST=Shaanxi, C=CN
发布者: CN=Han, OU=Huawei, O=Huawei Enterprise, L=Xi‘an, ST=Shaanxi, C=CN
序列号: 14bb7796
有效期开始日期: Mon Aug 08 22:06:56 CST 2016, 截止日期: Sun Nov 06 22:06:56 CST 2016
证书指纹:
         MD5: C5:EC:62:D2:CF:D9:87:E5:29:65:B3:69:27:D6:A3:52
         SHA1: 3F:30:39:6F:8C:D4:2B:BD:D0:A2:73:18:43:09:E1:D4:7C:88:A5:13
         SHA256: 61:C3:6B:22:87:DF:86:C7:01:6D:B1:04:88:6D:27:9C:C6:94:00:2C:B4:A2:D6:96:B9:60:D8:A4:6C:DB:EA:4F
         签名算法名称: SHA1withDSA
         版本: 3

扩展:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: CD 36 07 46 9E C8 52 AF   70 6D 65 62 F9 98 7A 14  .6.F..R.pmeb..z.
0010: 67 3F C5 D7                                        g?..
]
]

#2: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 69 4F C7 6A 2B 77 93 D1   F5 BD 97 D7 86 AA 3A 19  iO.j+w........:.
0010: 37 7D CA 56                                        7..V
]
]

总的来说,先给申请者生成certificate request,再由CA认证机构接受申请生成证书。

6、申请者收到 CA 颁发的证书后,可以使用将证书导入到 keystore 中,然后可以看到证书链。

D:\JAVA_test>keytool -importcert -alias samsara -file samsara.cer
输入密钥库口令:
证书回复已安装在密钥库中

D:\JAVA_test>keytool -list -v
输入密钥库口令:

密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 2 个条目

别名: myca
创建日期: 2016-8-8
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=Han, OU=Huawei, O=Huawei Enterprise, L=Xi‘an, ST=Shaanxi, C=CN
发布者: CN=Han, OU=Huawei, O=Huawei Enterprise, L=Xi‘an, ST=Shaanxi, C=CN
序列号: 6ff1a447
有效期开始日期: Mon Aug 08 21:18:24 CST 2016, 截止日期: Sun Nov 06 21:18:24 CST 2016
证书指纹:
         MD5: A3:AA:89:E6:45:89:5C:3E:04:C2:9F:DF:8B:8A:56:49
         SHA1: 3C:D3:CD:21:2A:F2:EB:59:4B:9F:C7:8B:67:4F:C0:37:7D:F1:B0:BF
         SHA256: C5:04:B1:A5:5B:30:7C:50:D6:A2:77:71:83:D3:76:B6:55:EE:39:EA:3F:90:A9:ED:5C:DB:0F:0E:1D:2B:F5:79
         签名算法名称: SHA1withDSA
         版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: CD 36 07 46 9E C8 52 AF   70 6D 65 62 F9 98 7A 14  .6.F..R.pmeb..z.
0010: 67 3F C5 D7                                        g?..
]
]

*******************************************
*******************************************

别名: samsara
创建日期: 2016-8-8
条目类型: PrivateKeyEntry
证书链长度: 2
证书[1]:
所有者: CN=samsara, OU=HH, O=HH wife, L=Xi‘an, ST=Shaanxi, C=CN
发布者: CN=Han, OU=Huawei, O=Huawei Enterprise, L=Xi‘an, ST=Shaanxi, C=CN
序列号: 14bb7796
有效期开始日期: Mon Aug 08 22:06:56 CST 2016, 截止日期: Sun Nov 06 22:06:56 CST 2016
证书指纹:
         MD5: C5:EC:62:D2:CF:D9:87:E5:29:65:B3:69:27:D6:A3:52
         SHA1: 3F:30:39:6F:8C:D4:2B:BD:D0:A2:73:18:43:09:E1:D4:7C:88:A5:13
         SHA256: 61:C3:6B:22:87:DF:86:C7:01:6D:B1:04:88:6D:27:9C:C6:94:00:2C:B4:A2:D6:96:B9:60:D8:A4:6C:DB:EA:4F
         签名算法名称: SHA1withDSA
         版本: 3

扩展:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: CD 36 07 46 9E C8 52 AF   70 6D 65 62 F9 98 7A 14  .6.F..R.pmeb..z.
0010: 67 3F C5 D7                                        g?..
]
]

#2: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 69 4F C7 6A 2B 77 93 D1   F5 BD 97 D7 86 AA 3A 19  iO.j+w........:.
0010: 37 7D CA 56                                        7..V
]
]

证书[2]:
所有者: CN=Han, OU=Huawei, O=Huawei Enterprise, L=Xi‘an, ST=Shaanxi, C=CN
发布者: CN=Han, OU=Huawei, O=Huawei Enterprise, L=Xi‘an, ST=Shaanxi, C=CN
序列号: 6ff1a447
有效期开始日期: Mon Aug 08 21:18:24 CST 2016, 截止日期: Sun Nov 06 21:18:24 CST 2016
证书指纹:
         MD5: A3:AA:89:E6:45:89:5C:3E:04:C2:9F:DF:8B:8A:56:49
         SHA1: 3C:D3:CD:21:2A:F2:EB:59:4B:9F:C7:8B:67:4F:C0:37:7D:F1:B0:BF
         SHA256: C5:04:B1:A5:5B:30:7C:50:D6:A2:77:71:83:D3:76:B6:55:EE:39:EA:3F:90:A9:ED:5C:DB:0F:0E:1D:2B:F5:79
         签名算法名称: SHA1withDSA
         版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: CD 36 07 46 9E C8 52 AF   70 6D 65 62 F9 98 7A 14  .6.F..R.pmeb..z.
0010: 67 3F C5 D7                                        g?..
]
]

*******************************************
*******************************************

【关键】keytool -genkeypair 不仅仅是生成密钥对,它会同时对公钥进行包装生成自签名的证书, keytool -gencert 并不是凭空生成证书,而是对 certificate request 进行回复

时间: 2024-12-18 21:58:07

keytool 学习与实战的相关文章

NGUI 学习笔记实战——制作商城

Unity3D的uGUI听说最近4.6即将推出,但是目前NGUI等UI插件大行其道并且已经非常成熟,所以我们还是先看眼前吧. 一.实现思想 商城的功能是很多游戏都拥有的,按下一个界面按钮,弹出一个窗体. 然后是商城中的商品可以拖动,既可以用手,也可以用滑条等等,至于点击购买就不单单是UI层的事了.等到实现NDate的时候再进行讨论. 二.实现背景 1.NGUI->Open->Prefab tool bar ,拖一个black widget进去 2.之后布局如下,这些应该没什么难度,弄好锚点,d

深度学习Caffe实战笔记(19)Windows平台 Faster-RCNN 制作自己的数据集

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 深度学习Caffe实战笔记(19)Windows平台 Faster-RCNN 制作自己的数据集 - gybheroin的博客 - 博客频道 - CSDN.NET gybheroin的博客 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [

Flask框架的学习与实战(一):开发环境搭建

Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2.很多功能的实现都参考了django框架.由于项目需要,在此记录下学习的过程及心得. 工欲善其事,必先利其器.就从搭建一套flask开发环境开始flask之旅吧. 一.平台说明 操作系统:window 7  64bit  数据库:mysql5.6  python:v2.7  开发集成软件:PyCharm5.0 二.开发环境搭建 1.安装flask框架包 1

进阶学习项目实战链接

进阶学习目录 Python Django Ansible Playbook自动化运维项目实战 https://pan.baidu.com/s/1MAz_sNypeDSySQCdLiOuDw 顶级资深工程师深度讲解Go语言开发入门到精通 Go编程爬虫实战视频 https://pan.baidu.com/s/1nx82k7mOn8ErlPSsCdLfTw Zabbix监控系统深度实践 https://pan.baidu.com/s/1v3bAFqhk890KokIsmu3CMQ Spring Boo

蓝懿IOS学习UICollectionView实战轮播图

今天刘国斌老师讲了关于JSON数据源的获取与利用,通过微博的实战项目进行练习,获取的数据都是网络上请求的真实数据,这种方式学起来很轻松,很容易理解. 刘国斌老师把今天做的练习题UICollectionView轮播图实现功能的方法步骤都下了下来,我们学起来很方便.   实现轮播图 效果的步骤: 1.创建layout (UICollectionViewFlowLayout) 2.设置layout的方向 默认上下 3.创建UICollectionView 4.设置delegate dataSource

今天是项目经理指导学习PHP实战项目的第二天

最近比较浮躁不安,一直抗拒学习PHP,在身边的朋友悉心引导下, 慢慢静下心来.我好开心,能有这么一个好的契机一边上班 一边学习. <tr> <td width="100">品牌</td> <td> <?php echo SqlSelect('goods where 1=1','brand','select','brand','-请选择品牌-'); ?> </td></tr> /**********数据库

Php廖雪峰教程学习与实战

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 目录 Python教程 Python简介 安装Python 第一个Python程序 Python基础 函数 高级特性 函数式编程 模块 面向对象编程 面向对象高级编程 错误.调试和测试 IO编程 进程和线程 正则表达式 常用内建模块 常用第三方模块 virtualenv 图形界面 网络编程 电子邮件 访问数据库 Web开发 异步I

Pytorch学习--编程实战:猫和狗二分类

Pytorch学习系列(一)至(四)均摘自<深度学习框架PyTorch入门与实践>陈云 目录: 1.程序的主要功能 2.文件组织架构 3. 关于`__init__.py` 4.数据处理 5.模型定义 6.工具函数 7.配置文件 8.main.py 9.使用 1.程序的主要功能: 模型定义    数据加载    训练和测试 2.文件组织架构: ```├── checkpoints/├── data/│   ├── __init__.py│   ├── dataset.py│   └── get_

今天是项目经理指导学习PHP实战项目的第二天下

<tr> <td width="100">品牌</td> <td> <?php echo SqlSelect('goods where 1=1','brand','select','brand','-请选择品牌-'); ?> </td></tr> /**********数据库筛选菜单********************************************************//**