安卓签名证书(.keystore)如何生成,以及.keystore转.jks的实现?
Android平台打包发布apk应用,需要使用数字证书(.keystore文件)进行签名,用于表明开发者身份。Android证书的生成是自助和免费的,不需要审批或付费。
安装了JRE(JRE环境)
Oracle官方下载jre安装包:https://www.oracle.com/technetwork/java/javase/downloads/index.html
jdk1.8.0_201的百度网盘地址:https://pan.baidu.com/s/1SPpySlZksTuti8IKe7kCrQ ,提取码:fly6
需确保电脑上安装了JRE(JRE环境),我们将使用JRE自带的创建和管理数字证书的工具Keytool,并使用keytool命令生成签名证书。
以Windows平台,jre安装目录为“E:\jdk1.8.0_201”为例,安装完成后,需要设置为全局变量:
点击电脑右键->选择“属性”,进入“关于”界面,点击右侧“相关设置”下方的“高级系统设置”,然后在“高级”栏目底部,选择“环境变量”,如图所示:

除了上面的方式,我们还可以通过cmd命令行的添加:
set PATH=%PATH%;"E:\jdk1.8.0_201\jre\bin"注意:
1.环境变量配置是安装目录下的\jre\bin文件夹。如果是其他版本,直接选择\bin文件夹目录。
2.安装JRE环境,建议低版本。否则容易出现证书无法使用的情况,建议jdk1.8.0的版本。
使用keytool -genkey命令生成证书
使用keytool -genkey命令生成证书:
keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore- testalias是证书别名,可修改为自己想设置的字符,建议使用英文字母和数字
- test.keystore是证书文件名称,可修改为自己想设置的文件名称,也可以指定完整文件路径
- 36500是证书的有效期,表示100年有效期,单位天,建议时间设置长一点,避免证书过期
回车后会提示:
Enter keystore password: /*输入证书文件密码,输入完成回车*/
Re-enter new password: /*再次输入证书文件密码,输入完成回车*/
What is your first and last name?
[Unknown]: /*输入名字和姓氏,输入完成回车 */
What is the name of your organizational unit?
[Unknown]: /*输入组织单位名称,输入完成回车 */
What is the name of your organization?
[Unknown]: /*输入组织名称,输入完成回车 */
What is the name of your City or Locality?
[Unknown]: /*输入城市或区域名称,输入完成回车 */
What is the name of your State or Province?
[Unknown]: /*输入省/市/自治区名称,输入完成回车 */
What is the two-letter country code for this unit?
[Unknown]: /*输入国家/地区代号(两个字母),中国为CN,输入完成回车 */
Is CN=XX, OU=XX, O=XX, L=XX, ST=XX, C=XX correct?
[no]: /*确认上面输入的内容是否正确,输入y,回车 */
Enter key password for <testalias>
(RETURN if same as keystore password): /*确认证书密码与证书文件密码一样(HBuilder|HBuilderX要求这两个密码一致),直接回车就可以*/以上命令运行完成后就会生成证书。注意:上述信息填写要规范,乱填有可能会影响应用上架应用市场。
注意:出现“JKS 密钥库使用专用格式”的提示,如下:

解决方案:把它复制粘贴后,在终端中黏贴进行运行,就可以了。
keytool -importkeystore -srckeystore test.keystore -destkeystore test.keystore -deststoretype pkcs12使用第三方工具生成证书:
如果你不想下载java的jdk,直接可以使用第三方在线工具进行生成:http://www.applicationloader.net/appuploader/keystore.php
只需要输入证书的别名,密码和创建者名称或者公司名称即可创建安卓证书。如果是测试环境,推荐使用这种方式。
查看证书信息
可以使用以下命令查看:
keytool -list -v -keystore test.keystore
Enter keystore password: //*输入密码,回车会输出以下格式信息:
Keystore type: PKCS12
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: test
Creation date: 2019-10-28
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Tester, OU=Test, O=Test, L=HD, ST=BJ, C=CN
Issuer: CN=Tester, OU=Test, O=Test, L=HD, ST=BJ, C=CN
Serial number: 7dd12840
Valid from: Fri Jul 26 20:52:56 CST 2019 until: Sun Jul 02 20:52:56 CST 2119
Certificate fingerprints:
MD5: F9:F6:C8:1F:DB:AB:50:14:7D:6F:2C:4F:CE:E6:0A:A5
SHA1: BB:AC:E2:2F:97:3B:18:02:E7:D6:69:A3:7A:28:EF:D2:3F:A3:68:E7
SHA256: 24:11:7D:E7:36:12:BC:FE:AF:2A:6A:24:BD:04:4F:2E:33:E5:2D:41:96:5F:50:4D:74:17:7F:4F:E2:55:EB:26
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3其中证书指纹信息(Certificate fingerprints):
- MD5
证书的MD5指纹信息(安全码MD5) - SHA1
证书的SHA1指纹信息(安全码SHA1) - SHA256
证书的SHA256指纹信息(安全码SHA245)
keystore 文件转 jks、pem格式
在应用上架市场的时候,部分应用市场可能需要你提供jks,或者pem格式的文件,这里就需要进行转换操作。下面以“test.keystore”文件为例:
keystore转 jks
先转成.p12
keytool -importkeystore -srckeystore test.keystore -srcstoretype JKS -deststoretype PKCS12 -destkeystore test.p12后把.p12转成.jks
keytool -v -importkeystore -srckeystore test.p12 -srcstoretype PKCS12 -destkeystore test.jks -deststoretype JKSjks转 pem
keytool -export -rfc -keystore test.jks -alias fishjump -file test.pem在每次进行转换的时候,都需要你输入3次证书文件密码。
Pepk 签名压缩的使用
首先需要下载Pepk.jar文件。
pepk.jar的 百度网盘地址:https://pan.baidu.com/s/1FEnsLuytvtBbUOyWdau1Xw,提取码:fly6
把Pepk.jar和你项目的签名文件(xxx.jks)复制到同一文件夹下,然后运行cmd命令cd到该文件夹,执行如下命令:
java -jar pepk.jar --keystore test.jks --alias alias --output=output.zip --encryptionkey=…… --include-cert- pepk.jar:pepk文件
- tst.jks:app的签名文件
- alias:签名文件别名
- encryptionkey如果是华为,可以直接复制
执行过程会让你输入key的密码,直接输入就行,执行完成会在目录下生成output.zip文件。
注意:使用git bash来输入命令可能会出现生成失败的情况,建议使用cmd。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!