由于最近的 SHA1 冲突新闻,我想确保 SHA1 不再在我的 apk 签名中使用。但是我找不到参数apk签名者.
有没有办法指定(直接或间接)apksigner 使用的摘要算法?
(在 SDK 24 之前,Android 使用 javajarsigner
签署 apk,其中有类似选项-sigalg SHA1withRSA -digestalg SHA1
)
更新:正如亚历克斯提到的,我发现了如何apksigner
确定方案v1的签名算法V1SchemeSigner.java.
简而言之,apksigner
确定它从minimumSDK
和证书的密钥类型。
-
SHA256withRSA
最低适用于 SDK 18 (Android 4.3) 及更高版本
-
SHA256withDSA
适用于最低 SDK 21 (Android 5.0) 及更高版本
-
SHA256withEC
最低 SDK 18 及以上
-
SHA1with*
对于较低的最低 SDK 级别
这是我为备忘而写的常见问题解答:SHA1 冲突和 Android APK 签名.
不直接。apksigner
尝试仅使用安全摘要和签名算法,但它会在您的签名密钥(大小、算法)和所签名的 APK 支持的 Android 平台版本所施加的限制内执行此操作。特别是对于 JAR 签名,apksigner
默认情况下使用 SHA-256 或更强,但仅适用于仅支持 API 级别 18 或更高版本的 APK(如中声明的minSdkVersion
在他们的AndroidManifest.xml
)。在早期平台上运行的 APK 必须使用 SHA-1,因为这些早期平台不支持使用 SHA-256 或更高版本验证 APK。对于APK签名方案v2签名,仅使用SHA-256或更强的签名,因为该签名方案甚至不支持SHA-1。
如果你想apksigner
要使用 SHA-256 签署您的 APK,您可以:
- 设置APK的
minSdkVersion
到 18 或更高,但这将使 API 级别 17 及更低的 Android 平台在安装时拒绝 APK。
- Pass in
--min-sdk-version=18
to apksigner
,但这将使 API 级别 17 及更低版本的 Android 平台在安装时拒绝 APK。
- 仅使用 APK 签名方案 v2 对 APK 进行签名,方法是传入
--v1-signing-enabled=false
to apksigner
,但这将使 API 级别 23 及更低版本的 Android 平台在安装时拒绝 APK。
P.S. 即使您改为仅使用 SHA-256 对 APK 进行签名,Android 仍会接受包含您的包名称和签名证书、使用 SHA-1 或 MD5 签名的 APK。因此,根据您的威胁模型,您可能需要切换到从未与 SHA-1 或更弱的摘要算法一起使用的新签名密钥。这不仅适用于实际密码签名中使用的摘要算法,还适用于.SF
and MANIFEST.MF
files.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)