由于最近的SHA1冲突消息,我想确保在我的apk签名中不再使用SHA1。但是我在apksigner中找不到参数。
有没有办法指定(直接或间接)apksigner使用的摘要算法?
(在SDK 24之前,Android使用java' s jarsigner
签署apk,其中包含-sigalg SHA1withRSA -digestalg SHA1
}等选项
更新:正如亚历克斯所说,我找到apksigner
如何确定V1SchemeSigner.java中方案v1的签名算法。
简而言之,apksigner
从minimumSDK
和密钥类型的证书中确定它。
SHA256withRSA
,最低限度为SDK 18(Android 4.3)及以上SHA256withDSA
,最低限度为SDK 21(Android 5.0)及以上SHA256withEC
,最低限度为SDK 18及以上SHA1with*
用于降低最低SDK级别这是我为备忘录写的常见问题解答:SHA1 Collision and Android APK Signing。
答案 0 :(得分:2)
不直接。 apksigner
尝试仅使用安全摘要和签名算法,但它会在签名密钥(大小,算法)和正在签名的APK支持的Android平台版本所施加的限制内执行此操作。特别是,对于JAR签名,默认情况下apksigner
使用SHA-256或更强,但仅适用于仅支持API级别18或更高版本的APK(如minSdkVersion
中AndroidManifest.xml
中声明的那样) 。在早期平台上运行的APK必须使用SHA-1,因为这些早期平台不支持使用SHA-256或更强版本验证APK。对于APK Signature Scheme v2签名,仅使用SHA-256或更强,因为此签名方案甚至不支持SHA-1。
如果您希望apksigner
使用SHA-256对您的APK进行签名,您可以:
minSdkVersion
设置为18或更高,但这会使API级别为17及更低的Android平台在安装时拒绝APK。--min-sdk-version=18
传递给apksigner
,但这会使API等级为17及更低级别的Android平台在安装时拒绝使用APK。--v1-signing-enabled=false
传递给apksigner
,仅使用APK签名方案v2对APK进行签名,但这将使得具有API等级23及更高级别的Android平台在安装时拒绝APK。 P上。 S.即使您仅使用SHA-256切换到签名APK,Android仍会接受带有您的包名和签名证书的APK,并使用SHA-1或MD5签名。因此,根据您的威胁模型,您可能需要切换到从未与SHA-1或较弱的摘要算法一起使用的新签名密钥。这不仅适用于实际加密签名中使用的摘要算法,还适用于.SF
和MANIFEST.MF
文件中使用的摘要算法。