前言
从一个小插曲引入jks和keystore对比,之前打签名包时不大注意。在使用IDE( android studio 或者 Eclipse)进行签名apk 针对 .jks 和.keystore 不同的签名类型需要进行所使用的签名文件选择,否则会有异常,某些接入第三方的功能会有异常
如图:
Jks签名:
有两个选项(密钥对:公钥和私钥)
Keystore 签名:
有一个选项:公钥
概述/jks 编辑
jks是数字证书库,可以在配置ssl的时候使用。
在配置ssl时一般分为信任库和证书库。
具体哪个是只个要看做什么用途,哪个是客户端。
jks里有KeyEntry和CertEntry, 而且可以具有多个这些Entry. KeyEntry是必须包含PrivateKey和证书(当然也包含了PublicKey)。
在库里的每个Entry都是靠别名来识别的。
引用网上较多的一种解释
JKS文件是一个java中的密钥管理库。
JKS文件就好像一个仓库,里面可以放很多的东西,这里只存放一类东西就是密钥,仓库当然会有一把锁,防范别人随便乱拿,
这个就是JKS文件的密码。里面存放的密钥也各有不同,每个密钥都有一个名字(在下面叫别名),一类就密钥对,一类叫公钥,
一类叫私钥,密钥对就是包含公钥和私钥的。这里的公钥只要你能进入仓库你就可以随便查看拿走,私钥则是有密码的,
只允许有权限的人查看拿走。
Keytool 是一个JAVA环境下的安全钥匙与证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore
的文件(受密码保护)中。
在keystore里,包含两种数据:
密钥实体(Key entity)——密钥(secretkey)又或者是私钥和配对公钥(采用非对称加密)
可信任的证书实体(trustedcertificate entries)——只包含公钥
2.使用android 自带keyTool 生成keyStore 文件
生成方式一:
方式一:android studio 和 Eclipse 进行apk签名,会自动弹出相应弹窗,跟着引导就可以生成制定的签名,这里不赘述
Android studio 方式 build—-Generate Signed APK
二、命令行生成keystore
dos下进入JDK的bin目录
运行如下命令:
C:\Program Files\Java\jdk1.8.0_92\bin>keytool -genkey -alias wyf1.keystore -keya
lg RSA -validity 20000 -keystore F:\nuoyuankeystore\jks\wechao.keystore
(-validity 20000代表有效期天数),命令完成后,bin目录中会生成wechao.keystore
查看命令keytool -list -keystore “wechao.keystore” 输入你设置的keystore密码
生成jks 或者keystore 签名文件
3、提取公钥JKS
1)导出公钥到证书中(cer文件)
存储在文件
2)将服务端证书(公钥),导入客户端密钥库中
Keytool -import -alias nuoyuan -file F:\nuoyuankeystore\nuoyuan.cer -keystore F:\nuoyuankeystore\keystore\ceshi.jks -storepass 需要设置密钥库密码 **
(保存时,需要设置密钥库密码,且此时不能少于6位)
至此,私钥JKS、公钥JKS文件都已经生成好了,生成文件如下:
这里推荐一个读取软件 名字叫 portecle , 链接 可以方便进行读取签名中信息
4、Java使用JKS文件,示例代码
1)使用私钥签名
2)使用公钥验签