生成签名
使用 keytool
工具生成密钥库。密钥库是一个包含密钥对的安全文件,其中包括您的应用签名密钥。
签名的加密方式
- 之前大都使用的
RSA
。 - 现在已经不推荐使用了,推荐使用
SHA256withRSA
。
签名格式
- JKS(Java KeyStore):JKS 是 Java 专用格式。
- PKCS12:PKCS12 是国际标准格式,被大多数操作系统和开发工具支持。Android Studio推荐使用 PKCS12。
注意
更换签名格式是不会影响已发布应用的。
更换加密方式会影响已发布应用,导致无法更新。
JKS(RSA)
1 | keytool -genkey -alias xinghuo -keyalg RSA -validity 18250 -keystore xinghuo.keystore |
其中
- -alias android.keystore 别名为
alias android.keystore
- -keyalg RSA 加密类型
RSA
- -validity 20000 有效期天数
20000
- -keystore android.keystore 生成文件路径和名字
android.keystore
这将生成一个名为 xinghuo.keystore
的密钥库文件,并使用 RSA 算法生成一个密钥对。
注意
keytool在JDK的bin下面,找不到记得添加环境变量。
现在会报警告
使用的 MD5withRSA 签名算法被视为存在安全风险而且被禁用。
PKCS12(SHA256withRSA)(推荐)
1 | keytool -genkeypair -alias xinghuo -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 18250 -storetype PKCS12 -keystore xinghuo2.p12 |
参数说明:
-sigalg SHA256withRSA
:指定使用 SHA256withRSA 签名算法-keyalg RSA
:密钥算法-keysize 2048
:密钥长度(推荐 2048 或更高)-validity 18250
:有效期约 50 年
JKS迁移至PKCS12
PKCS12(Public-Key Cryptography Standards #12)是目前行业广泛采用的密钥存储标准格式,相比传统的 JKS(Java KeyStore)格式具有更好的跨平台兼容性(支持 Java、iOS、Windows 等多平台)和安全性。
Android 开发中,推荐将签名证书迁移到 PKCS12 格式(文件后缀通常为 .p12
或 .pfx
)。
迁移到行业标准格式 PKCS12
1 | keytool -importkeystore -srckeystore xinghuo.keystore -destkeystore xinghuo.p12 -deststoretype pkcs12 |
查看转换结果
1 | keytool -list -v -keystore xinghuo.p12 |
可以看到
密钥库类型: PKCS12
PKCS12 和 JKS 只是密钥存储格式的不同,转换过程中:
- 私钥、公钥、证书链等核心签名信息保持不变;
- 应用签名时使用的签名算法(如 SHA256withRSA) 也不会改变;
- 转换后的证书本质上与原证书是 “同一身份”,Android 系统和应用商店会识别为同一开发者签名。
因此,用转换后的 PKCS12 证书签名的新版本应用,与原 JKS 证书签名的旧版本应用签名一致,用户可以正常覆盖更新,不会出现 “签名不匹配” 的安装失败问题。
获取签名信息
查看签名类型、有效期、SHA1值
JKS格式
1 | keytool -list -v -keystore xinghuo.keystore -storepass xhkjedu |
PKCS12格式
1 | keytool -list -v -keystore xinghuo2.p12 -storepass xhkjedu |
项目中使用
JKS
假如我i们的签名文件是xinghuo.keystore
把它放到app目录
下的src
同级目录中
build.gradle.kts
中添加配置
1 | android { |
PKCS12
假如我i们的签名文件是xinghuo.p12
把它放到app目录
下的src
同级目录中
build.gradle.kts
中添加配置
1 | android { |
打包