360应用商店上架提示签名算法采用“SHA256withRSA”,在部分4.2一下安卓版本的手机上不能安装

问题描述

  • 前一段时间给公司一个新的App上架360应用商店,因为需要加固,便下载了最新版的360加固助手,加固助手挺方便的,加固签名一条龙。然而问题就出在了这里,拿加固签名之后的App上架,wtf???提示:您的应用签名算法采用“SHA256withRSA”,在部分4.2一下安卓版本的手机上不能安装。显然,是签名出问题了。我就纳闷了,用你自家的签名工具签名,上架你们自家的应用商店,提示签名有问题,让人无语。我之前也是用过360加固助手的,不过是老版本的,也上架过360应用市场,并没有出现这样的问题。网上也给出了解决方案:

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 ~/Workspace/jks -signedjar ./xxx.apk ./xxx.signed.apk yyy

问题分析

  1. 这样是可以解决问题,但我觉得,这肯定是360加固助手的bug呀,为了验证我的猜想,我将加固助手设置成只加固不签名:签名设置 >取消勾选启用自动签名360应用商店上架提示签名算法采用“SHA256withRSA”,在部分4.2一下安卓版本的手机上不能安装
  2. 下载老版本的360签名工具,为了验证我的猜想:新版本才会有这个bug,本着方便大家的原则,本文提供 360签名工具下载链接
  3. 使用360签名工具签名加固后的apk文件,然后你会发现,神奇的事产生了,不报错了。我的猜想正确,新版360加固助手有这样一个bug。

最后总结

  • 其实这个问题的根本原因是:jdk1.6版本下的keytool用的是SHA1算法生成的签名,而在jdk1.6+变成了SHA-256。360新版加固助手,也更新了签名算法,但是,自家应用商店有不支持SHA-256签名算法,于是bug就这样产生了。应该是部门之前沟通不充分吧。

补充说明

  • jarsigner的命令格式:

    1. jarsigner -verbose -keystore [您的私钥存放路径] -signedjar [签名后文件存放路径] [未签名的文件路径] [您的证书名称]
  • jarsigner的参数说明

    1. -keystore 参数指定您的私钥的绝对路径,例如:c:\jks
    2. -signedjar 参数指定签名后apk文件存放绝对的路径,例如 c:\test-singned.apk
    3. [未签名的文件路径] 指定要签名apk文件的绝对路径,也就是您从我们这里下载到的,例如 c:\test-unsigned.apk
    4. [您的证书名称] 是指您创建**时,您设置的证书名称