- Keytool:JDK中自带(路径:%JAVA_HOME%\bin)
- OpenSSL下载地址:http://slproweb.com/products/Win32OpenSSL.html
生成数字证书
- 命令行执行:
keytool -genkey -alias [你的数字证书别名] -keyalg RSA -validity 36500 -keystore [你的密钥库文件名]
- 输入密钥库口令(建议妥善记录):
- 连续回车跳过几个配置,输入"y"确认
- 输入密钥口令(如果保持和密钥库口令相同,按回车)
1、如果在 C:\User[你的计算机名] 下没有 [你的密钥库文件名].keystore 文件,上述命令将在该目录下新建一个
[你的密钥库文件名].keystore
文件(密钥库文件)
2、密钥库口令是访问[你的密钥库]
的密码,密钥口令指的是[你的数字证书]
的密码
列举数字证书
- 命令行执行:
keytool -list -keystore [你的密钥库路径] 如:keytool -list -keystore C:\Users\XuRui\[你的密钥库文件名]
- 输入密钥库口令
- 输出结果:
密钥库类型: jks 密钥库提供方: SUN 您的密钥库包含 1 个条目 [你的数字证书别名], 2019-4-16, PrivateKeyEntry, 证书指纹 (SHA1): F3:D6:######:1B:F9
提取SHA1证书指纹
- 命令行执行:
keytool -exportcert -list -v -alias [你的数字证书别名] -keystore [你的密钥库路径] 如:keytool -exportcert -list -v -alias [你的数字证书别名]-keystore C:\Users\XuRui\[你的密钥库文件名]
- 输入密钥库口令
- 输出结果:
别名: [你的数字证书别名] 创建日期: 2019-4-16 条目类型: PrivateKeyEntry 证书链长度: 1 证书[1]: 所有者: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 发布者: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 序列号: [序列号] 有效期为 Tue Apr 16 11:34:22 CST 2019 至 Thu Mar 23 11:34:22 CST 2119 证书指纹: MD5: 36:18:######:2D:65 SHA1: F3:D6:######:1B:F9 SHA256: D5:E3:######:36:1A 签名算法名称: SHA256withRSA 主体公共密钥算法: 2048 位 RSA 密钥 版本: 3 // 以下省略
提取密钥散列
- 命令行执行:
keytool -exportcert -alias [你的数字证书别名] -keystore [你的密钥库路径] | openssl sha1 -binary | openssl base64 如:keytool -exportcert -alias [你的数字证书别名]-keystore C:\Users\XuRui\[你的密钥库文件名] | openssl sha1 -binary | openssl base64
- 输入秘钥口令
- 输出结果:
8KC/######CuZ3=
APK签名
- build.gradle中配置:
android{
...
signingConfigs {
release {//构建变体名
keyAlias '[密钥/数字证书别名]'
keyPassword '[密钥密码]'
storePassword '[密钥库密码]'
storeFile file('release/[密钥库文件名]') //密钥库文件的相对于项目根目录的路径
}
}
}
查看APK签名
- 用WinRAR等工具解压apk,进入META-INF文件夹,其中RSA文件为签名信息
- 命令行执行:
keytool -printcert -file META-INF/[RSA文件名].RSA
- 输出结果:
所有者: [所有者] 发布者: [发布者] 序列号: [序列号] 有效期为 Sat Sep 25 15:37:04 CST 2010 至 Sun Jun 28 15:37:04 CST 2065 证书指纹: MD5: 84:6B:######:87:74 SHA1: 23:27:######:05:33 SHA256: BF:46:######:0A:B4 签名算法名称: SHA1withRSA 主体公共密钥算法: 1024 位 RSA 密钥 版本: 3
推荐阅读
- Java | ThreadLocal 线程本地存储
- Android | 文件存储
- Android | 再按一次返回键退出
- Android | InputManagerService 与输入事件采集
- 设计模式 | 静态代理与动态代理
- Cocos Creator | 封装音频池工具
- 笔记 | 使用 Markdown 高效率编写文档