这篇博客以Mac系统为例,window系统类似。

首先打开终端,输入:

keytool -help
keytool -help

效果如下:

gefufengdeMacBook-Air:bin gefufeng$ keytool -help
密钥和证书管理工具

命令:

 -certreq            生成证书请求
 -changealias        更改条目的别名
 -delete             删除条目
 -exportcert         导出证书
 -genkeypair         生成密钥对
 -genseckey          生成密钥
 -gencert            根据证书请求生成证书
 -importcert         导入证书或证书链
 -importpass         导入口令
 -importkeystore     从其他密钥库导入一个或所有条目
 -keypasswd          更改条目的密钥口令
 -list               列出密钥库中的条目
 -printcert          打印证书内容
 -printcertreq       打印证书请求的内容
 -printcrl           打印 CRL 文件的内容
 -storepasswd        更改密钥库的存储口令

使用 "keytool -command_name -help" 获取 command_name 的用法
gefufengdeMacBook-Air:bin gefufeng$ keytool -help
密钥和证书管理工具

命令:

 -certreq            生成证书请求
 -changealias        更改条目的别名
 -delete             删除条目
 -exportcert         导出证书
 -genkeypair         生成密钥对
 -genseckey          生成密钥
 -gencert            根据证书请求生成证书
 -importcert         导入证书或证书链
 -importpass         导入口令
 -importkeystore     从其他密钥库导入一个或所有条目
 -keypasswd          更改条目的密钥口令
 -list               列出密钥库中的条目
 -printcert          打印证书内容
 -printcertreq       打印证书请求的内容
 -printcrl           打印 CRL 文件的内容
 -storepasswd        更改密钥库的存储口令

使用 "keytool -command_name -help" 获取 command_name 的用法

这是keytool的一些常用命令。



生成一个keystore

生成一个keystore的命名为:

keytool -genkey -alias alias_name -keyalg RSA -validity 20000 -keystore /Users/gefufeng/work/demo/android.key
keytool -genkey -alias alias_name -keyalg RSA -validity 20000 -keystore /Users/gefufeng/work/demo/android.key

    -alias 后面跟的是别名这里是alias_name

    -keyalg 是加密方式这里是RSA

    -validity 是有效期这里是20000天

    -keystore 就是要生成的keystore的名称这里是android.key

注意: -keystore 我这里写上了路径,如果不写的话,命令为:

keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.key
 keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.key

这样生成的android.key文件就在/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/bin目录下,但是在这个目录下我没有权限,所以写到最后报错:

keytool 错误: java.io.FileNotFoundException: Android.keystore (Permission denied)
keytool 错误: java.io.FileNotFoundException: Android.keystore (Permission denied)

故我加上了 /Users/gefufeng/work/demo/android.key

下面是具体步骤:

gefufengdeMacBook-Air:bin gefufeng$ keytool -genkey -alias android.key -keyalg RSA -validity 20000 -keystore /Users/gefufeng/work/demo/android.key
输入密钥库口令:  
再次输入新口令: 
您的名字与姓氏是什么?
  [Unknown]:  ge
您的组织单位名称是什么?
  [Unknown]:  ge
您的组织名称是什么?
  [Unknown]:  ge
您所在的城市或区域名称是什么?
  [Unknown]:  ge
您所在的省/市/自治区名称是什么?
  [Unknown]:  ge
该单位的双字母国家/地区代码是什么?
  [Unknown]:  CH
CN=ge, OU=ge, O=ge, L=ge, ST=ge, C=CH是否正确?
  [否]:  y

输入 <android.key> 的密钥口令
	(如果和密钥库口令相同, 按回车):
gefufengdeMacBook-Air:bin gefufeng$ keytool -genkey -alias android.key -keyalg RSA -validity 20000 -keystore /Users/gefufeng/work/demo/android.key
输入密钥库口令:  
再次输入新口令: 
您的名字与姓氏是什么?
  [Unknown]:  ge
您的组织单位名称是什么?
  [Unknown]:  ge
您的组织名称是什么?
  [Unknown]:  ge
您所在的城市或区域名称是什么?
  [Unknown]:  ge
您所在的省/市/自治区名称是什么?
  [Unknown]:  ge
该单位的双字母国家/地区代码是什么?
  [Unknown]:  CH
CN=ge, OU=ge, O=ge, L=ge, ST=ge, C=CH是否正确?
  [否]:  y

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

    至此,我的keystore文件生成



查看ketstore文件的信息

这个关键是找到你的keystore文件的位置,例如:

keytool -list -v -ketsore /Users/gefufeng/work/demo/android.key
keytool -list -v -ketsore /Users/gefufeng/work/demo/android.key

效果如下:

gefufengdeMacBook-Air:bin gefufeng$ keytool -list -v -keystore /Users/gefufeng/work/demo/android.key -storepass gefufeng

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

您的密钥库包含 1 个条目

别名: android.key
创建日期: 2016-5-6
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=ge, OU=ge, O=ge, L=ge, ST=ge, C=CH
发布者: CN=ge, OU=ge, O=ge, L=ge, ST=ge, C=CH
序列号: 162d2412
有效期开始日期: Fri May 06 13:59:44 CST 2016, 截止日期: Sat Feb 07 13:59:44 CST 2071
证书指纹:
	 MD5: 49:CD:72:AA:3F:F3:42:9C:29:35:75:8B:00:94:74:7C
	 SHA1: 2F:A5:66:6D:C7:E0:B4:0D:4F:6D:39:BC:E1:4B:F4:70:5C:EB:DE:62
	 SHA256: BD:4A:BD:1B:AF:38:8A:43:B5:15:8A:17:08:BE:16:16:65:1A:62:6F:8E:B3:B3:22:0B:8B:92:86:EF:4F:A3:9E
	 签名算法名称: SHA256withRSA
	 版本: 3

扩展: 

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 53 0C 42 69 5E 7C B4 D6   A1 3B CD FF DD 74 76 7C  S.Bi^....;...tv.
0010: 82 42 2E D8                                        .B..
]
]



*******************************************
*******************************************
gefufengdeMacBook-Air:bin gefufeng$ keytool -list -v -keystore /Users/gefufeng/work/demo/android.key -storepass gefufeng

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

您的密钥库包含 1 个条目

别名: android.key
创建日期: 2016-5-6
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=ge, OU=ge, O=ge, L=ge, ST=ge, C=CH
发布者: CN=ge, OU=ge, O=ge, L=ge, ST=ge, C=CH
序列号: 162d2412
有效期开始日期: Fri May 06 13:59:44 CST 2016, 截止日期: Sat Feb 07 13:59:44 CST 2071
证书指纹:
	 MD5: 49:CD:72:AA:3F:F3:42:9C:29:35:75:8B:00:94:74:7C
	 SHA1: 2F:A5:66:6D:C7:E0:B4:0D:4F:6D:39:BC:E1:4B:F4:70:5C:EB:DE:62
	 SHA256: BD:4A:BD:1B:AF:38:8A:43:B5:15:8A:17:08:BE:16:16:65:1A:62:6F:8E:B3:B3:22:0B:8B:92:86:EF:4F:A3:9E
	 签名算法名称: SHA256withRSA
	 版本: 3

扩展: 

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 53 0C 42 69 5E 7C B4 D6   A1 3B CD FF DD 74 76 7C  S.Bi^....;...tv.
0010: 82 42 2E D8                                        .B..
]
]



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

所有信息一览无余