要改Google签名?这些你足够了解吗!

大家好,我是小编阿文。欢迎您关注我们,经常分享有关Android出海,iOS出海,App市场政策实时更新,互金市场投放策略,最新互金新闻资讯等文章,期待与您共航世界之海。

老项目keystore签名信息包含国内背景信息要改?签名信息更换要改?签名过期要改?签名被盗要改?考虑升级签名要改?

不管你是何种原因要改,Google应用签名密钥Google上传签名密钥这俩概念你真的懂了吗?

让我们一起详细探讨下什么是Google应用签名密钥,什么是Google上传签名密钥!

Google应用签名密钥

我们先来聊聊Google应用签名密钥。作为Android开发者,我们都知道App上传应用市场一定要有正式的应用签名,也就是大家熟知的keystore或者jks文件。对于Android项目而言,应用签名是至关重要且要一定保管好的。这都归咎于它在应用发布、下载和安装过程中的重要地位。应用签名作用如下:

  1. 校验应用的完整性:签名可以确保应用在发布、下载和安装过程中没有被篡改,保证用户下载到的应用是原始版本。

  2. 确认应用来源:签名是开发者与应用之间的可信任关联,表明应用是由特定开发者发布的。

  3. 防止应用被恶意替换:如果应用使用一个特定的密钥签名,那么其他使用不同密钥签名的文件将无法安装或覆盖该应用,从而防止恶意第三方替换或覆盖已安装的应用。

如果您操作过Google Play App上架流程(Android出海实战:Google Play 上架教程),你会发现我们在第一次发布App的时候会有一个步骤:上传应用密钥(应用签名)。Google给我们提供了2种方式:Google自动生成应用签名密钥以及开发者自行提供应用签名密钥,步骤截图及解释如下:

Image

Image

选择Google 生成应用签名,点击确认按钮即可。在这里也是强烈建议大家使用Google生成应用签名密钥,至少我们一直是这么做的。不过,如果您要使用自行提供的应用签名密钥,可以选择使用其他密钥 -> 选择从java密钥库导出并上传密钥。

Image

当然,我们也不能直接上传keystore或者jks文件,为了安全考虑,Google提供了加密公钥来对我们的密钥文件加密,而Google需要的是加密后的zip文件。步骤截图和详细解释如下:

按照上图我们下载加密公钥(每个应用是不一样的,所以我们必须下载自己Play后台的公钥文件)和PEPK工具,执行下面的命令后输入相关密钥库密码以及密钥密码就会输出output.zip 文件,最后执行第四步上传该文件即可。

java -jar pepk.jar --keystore=your keystroe --alias=your keystroe alias --output=output.zip --include-cert --rsa-aes-encryption --encryption-key-path=encryption_public_key.pem

注意:如果出现否java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/NONE/OAEPWithSHA1AndMGF1Padding 这个错误,可以检查下使用的JDK 是否是OpenJDK,因为这条命令需要用OpenJDK的Java jar去执行。

聊到这里,大家对Google应用签名密钥可能都不是很陌生。那么Google上传签名密钥又是什么呢?

Google上传签名密钥

我们先来看下面这张图:

Image

在Play后台设置 -> 应用签名一列,有一项上传密钥证书。见名知意,它是Google用于确认我们上传的App更新是您本人提供的,而不是被他人恶意纂改过的。我们第一次上传应用后Google 默认会将应用的签名文件设置为上传密钥。聊到这里,我想大家应该明白了,更改Google签名,我们大概率要改的是这个上传密钥证书,而非Google应用签名证书(当然,这不包括自行提供的应用签名密钥的用户)。下面我们来简单说下这两种密钥都如何更改。先看大部分Google用户关心的上传密钥证书更改。

Google上传签名密钥更改

Google大大事无巨细,已经详细提供了更改方法,见下图:

Image

  1. 首先,我们打开google 后台进入应用程序->设置->应用签名->请求重置上传密钥并选择重置上传密钥的原因。如上图。

  2. 生产新的签名密钥库,并使用密钥库通过命令生成.pem文件。命令如步骤3下:

  3. 上传.pem 文件并申请,上传后会有三天左右的审核期,在此期间用新的签名的应用上传会提示xxxx.xx.xx xx:xx (具体时间)后签名文件生效的一个提示

    $ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem

至此,在审核过后,Google上传签名密钥更改就成功了。等下次再提包时,我们在使用新的上传密钥就OK了。

Google应用签名密钥更改

一般来说我们不需要更新应用签名密钥。以下是请求升级应用签名密钥的几种原因:您需要加密强度更高的密钥或者您的应用签名密钥被盗(只适用于使用自行上传的签名场景)

我们打开google 后台进入应用程序->设置->应用签名->请求升级密钥,选择自己上传的新密钥即可,如下图

Image

Image

后续步骤和上文使用自行提供的应用签名密钥相同,不在过多讲述。不过有一些注意事项,在这里提醒下大家

  1. 只有使用 app bundle 的应用支持密钥升级。

  2. 只会对于 Android N(API 级别 24)及更高版本上的设备生效,并且每个应用的应用签名密钥每年只能升级一次 

  3. 如果您成功请求升级此密钥,您的新密钥将用于为所有安装和应用更新签名。在搭载 Android T(API 级别 33)及更高版本的设备上,Android 平台将强制要求使用升级后的密钥 

  4. 在搭载 Android N(API 级别 24)到 Android S(API 级别 32)的设备上,除非用户关闭了 Google Play 保护机制,否则该机制会检查应用更新是否已使用您升级后的密钥签名。

番外篇

为了大家对这部分知识了解更全面,我们在多赘述一下如何创建签名文件及Android V1 V2 V3 V4 四种签名方案及签名流程介绍。

创建签名文件的方式(我们通过Android Studio)

1) 在菜单栏中,依次点击 Build > Generate Signed Bundle/APK。在 Generate Signed Bundle or APK 对话框中,选择 Android App Bundle 或 APK,然后点击 Next。

Image

2) 在 Key store path 字段下,点击 Create new。

3) 填写签名信息(这部分信息很重要,一定要经过领导的确认才能填写)

密钥库信息Key store path:选择创建密钥库的位置Password:密钥库密码· 密钥信息Alias:为您的密钥输入一个标识名(别名)Password:密钥密码。建议与密钥库密码相同(4.2 版本开始,Android Studio 现在将在 JDK 11 上运行。此变更会导致与签名密钥相关的底层行为发生变更,如果不一致会出现Different store and Key passwords not supported for PKCS12 Key stores)。Validity (years):以年为单位设置密钥的有效时长。密钥的有效期应至少为 25 年。· Certificate:为证书输入一些关于您本人的信息。此信息不会显示在应用中,但会作为 APK 的一部分包含在您的证书中。First and Last Name:名字和姓氏Organizational Unit:组织单位名称Organization:组织名称City or Locality:城市或区域名称State or Province:省/市/自治区名称Countyr Code:国家地区代码(双字母)

Image

Android V1 V2 V3 V4 四种签名方案及签名流程介绍
签名方案介绍:
v1签名方案使用场景:适用于所有Android系统版本,包括旧版系统。优点:兼容性好:由于是基于JAR的签名,V1签名方案在所有Android系统版本上都具有很好的兼容性。签名文件较小:V1签名产生的签名文件较小,不会明显增加应用的大小。缺点:安全性较低:V1签名只对整个JAR文件进行签名,无法对单个文件进行精确校验。如果应用的某个文件被篡改,V1签名无法检测到。可信度较低:V1签名只要求应用的发布者拥有一个有效的证书,无法验证证书的信任链,因此无法确保应用的来源的可信度。v2签名方案使用场景:适用于Android 7.0(API级别24)及更高版本。优点:减少APK大小:V2签名可以将APK的内容进行划分,只对部分内容进行签名,从而减少APK的大小。提高验证速度:由于V2签名对APK内容进行了划分,可以并行验证每个部分,从而提高验证的速度。增强安全性:V2签名使用基于SHA256的哈希算法和ECDSA进行签名,提供了更好的保护。缺点: 对旧版Android系统兼容性有限:在Android 7.0之前的版本中,不支持V2签名。v3签名方案使用场景:适用于Android 9.0(API级别28)及更高版本。优点:更高的安全性:V3签名采用了更强大的签名算法(基于RSA或ECDSA)和更长的密钥长度,以提供更高的安全性。支持APK密钥轮替:V3签名方案的一个关键特性是支持APK密钥的轮替。这意味着在应用的更新过程中,开发者可以更改其签名密钥。这对于安全管理、密钥过期或需要提高安全性的情况非常有用。缺点:对旧版Android系统兼容性有限:在Android 9.0之前的版本中,不支持V3签名。v3.1签名方案使用场景:适用于Android 13及更高版本。优点:支持SDK版本定位功能:允许轮替定位到平台的更高版本。向后兼容性:在旧版Android设备上,会忽略轮替signer,而使用V3分块中的原始signer。缺点: 对旧版Android系统兼容性有限:在Android 13之前的版本中,不支持V3.1签名。v4签名方案使用场景:适用于Android 11及更高版本,主要用于支持ADB增量APK安装。优点:支持增量更新:允许开发者只推送APK中发生更改的部分,减少网络带宽使用,加速应用更新过程。安全性高:继承了v2和v3签名的安全性特点。缺点: 技术复杂性:相比其他签名方式,V4签名在技术上更为复杂。工具支持:部分旧的构建工具和IDE可能不完全支持V4签名。性能影响:在某些情况下,V4签名可能会稍微增加应用安装或更新的时间。
签名流程介绍

v1签名方案签名流程:

·  使用 SHA1/SHA256 对apk的所有文件计算摘要 保存在\*.MF文件
·  使用 SHA1/SHA256对\*.MF文件以及MF中每个Name对应的值进行计算摘要并保存在\*.SF文件
·  使用私钥对*.SF文件签名打包签名、公钥以及证书生成\*.RSA文件
·  将上面三个文件放入META-INF目录打包到应用中

验证流程:

·  校验SF文件的签名:计算\*.SF文件的摘要,然后用\*.RSA文件中公钥解密\*.RSA中签名得到的摘要,如果两者一致则进入下一步;
·  校验\*.MF文件的完整性:计算MANIFEST.MF文件的摘要,与\*.SF主属性中的摘要进行对比,如一致则逐一校验\*.MF文件各个条目的完整性;
·  校验APK中每个文件的完整性:逐一计算APK中每个文件(META-INF目录除外)的摘要,与\*.MF中的记录进行对比,如全部一致,刚校验通过;
·  校验签名的一致性:如果是升级安装,还需校验证书签名是否与已安装APP一致,如果应用中存在相同包名但签名不一样的APP,则安装失败;

v2 v3 v4 签名方案签名流程

APK实际上是一个ZIP格式的压缩包,ZIP结构主要包括了3个部分数据区、中央目录区、中央目录结尾区

· 数据区:存放真正数据的地方。
· 中央目录区:存放关于数据区的元数据的地方。
· 中央目录结尾区:存放关于中央目录区的元数据的地方

签名流程

· 对这数据区、中央目录区和中央目录结尾区,这3块块区域进行切分,切分成一个个大小为1M的小块
· 计算每个小块的消息摘要,将所有小块的消息摘要拼接在一起,整体计算消息摘要并用私钥进行签名
· 将签名、公钥、证书、算法、签名者信息等相关内容作为一个新的区域(APK 签名分块),插入到ZIP结构中,位于“ZIP 中央目录区“之前

验签过程:

· 找到APK 签名分块并验证以下内容:a. APK 签名分块的两个大小字段包含相同的值。b. ZIP 中央目录结尾紧跟在ZIP 中央目录记录后面。c. ZIP 中央目录结尾之后没有任何数据。
· 找到APK 签名分块中的第一个APK 签名方案 v2 分块。如果 v2 分块存在,则继续执行第 3 步。否则,回退至使用 v1 方案验证 APK。
· 对APK 签名方案 v2 分块中的每个 signer 执行以下操作:a. 从 signatures 中选择安全系数最高的受支持 signature algorithm ID。安全系数排序取决于各个实现/平台版本。b. 使用 public key 并对照signed data 验证 signatures 中对应的 signature。(现在可以安全地解析 signed data 了。)c. 验证 digests 和 signatures 中的签名算法 ID 列表(有序列表)是否相同。(这是为了防止删除/添加签名。)d. 使用签名算法所用的同一种摘要算法计算 APK 内容的摘要。e. 验证计算出的摘要是否与 digests 中对应的 digest 相同。f. 验证 certificates 中第一个 certificate 的 SubjectPublicKeyInfo 是否与 public key 相同。
· 如果找到了至少一个 signer,并且对于每个找到的 signer,第 3 步都取得了成功,APK 验证将会成功。

写在最后

好了各位,以上就是这篇文章的全部内容了,很感谢您阅读这篇文章,希望也对您有所帮助。我是小编阿文,经常分享有关Android出海,iOS出海,App市场政策实时更新,互金市场投放策略,最新互金新闻资讯等文章,您的认可就是我创作的最大动力。山水有相逢,我们下篇文章见!

出海之路,路远且艰。更多金融出海解决方案,欢迎关注公众号,大家一起探讨更多出海实战及政策合规问题,稳健航行世界之海。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/30551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

瑞数信息入选IDC《中国WAAP厂商技术能力评估,2024》

5星满分:WAF、Bot流量管理、行业应用等评估维度 日前,全球领先的IT市场研究和咨询公司IDC发布《中国WAAP厂商技术能力评估,2024》。报告聚焦WAAP能力,通过对中国市场中主要WAAP产品提供商的技术评估以及对大量最终用户的客观访谈…

一文彻底搞懂 Transformer(图解+手撕)

Transformers 亮相以来彻底改变了深度学习模型。 今天,我们来揭示 Transformers 背后的核心概念:注意力机制、编码器-解码器架构、多头注意力等等。通过 Python 代码片段,让你深入了解其原理。 一、理解注意力机制 注意力机制是神经网络中…

代理设计模式,框架AOP思想

文章目录 引言🤪代理对象(Proxy)如何开发一个代理对象开发中的业务层代码冗余问题开发静态代理类动态代理 引言🤪 代理 (proxy) ,举个生活中常见的现象,在之前网路还未走进大众的时代里,如果我们想买一些东西&#xf…

第十九届全国大学生智能汽车竞赛智慧巡检创意组赛程安排通知

各位老师和同学们大家好: 通知一:经过和大赛组委会、承办校协商确定,天途智慧巡检创意组线下预选赛和总决赛将在吉林大学(东北赛区)举办,赛程如下: 地点:吉林大学前卫南区体育馆 地…

Nginx之文件下载服务器

1.概述 在对外分享文件时,利用Nginx搭建一个简单的下 载文件管理服务器,文件分享就会变得非常方便。利 用Nginx的诸多内置指令可实现自动生成下载文件列表 页、限制下载带宽等功能。配置样例如下: server {listen 8080;server_name localhos…

有了MES、ERP,质量管理为什么还需要QMS?

在制造业,质量管理始终是企业管理中永恒的主题。品质管理要想做得更好,企业必须掌握足够多、足够有用的数据和信息,实现质量管理信息化。很多中小企业也很困惑,是否有必要上线QMS质量管理系统? 一、为什么企业需要QMS的…

Graph RAG 的力量:智能搜索的未来

随着世界越来越依赖数据,对准确、高效的搜索技术的需求从未如此高涨。传统搜索引擎虽然功能强大,但往往难以满足用户复杂而细微的需求,尤其是在处理长尾查询或专业领域时。Graph RAG(检索增强生成)正是在这种情况下应运…

Python-Socket网络编程简单示例

# TCP 服务端程序 server.py # 导入socket 库 from socket import *# 主机地址为空字符串,表示绑定本机所有网络接口ip地址 # 等待客户端来连接 IP # 端口号 PORT 50000 # 定义一次从socket缓冲区最多读入512个字节数据 BUFLEN 512# 实例化一个socket对象 # 参…

第1讲:创建vite工程,使用框架为Vanilla时,语言是typescript,修改http端口的方法

直接在项目根目录创建 vite.config.ts文件。 在该文件中添加内容: import { defineConfig } from vite;export default defineConfig({server: {port: 7777,}, });最后尝试运行package.json中的Debug

AI大模型的TTS评测

L-MTL(Large Multi-Task Learning)Models 是一种大规模多任务学习模型,通过结合 Mixture of Experts(MMoE)框架与 Transformer 模型,实现对 TTS(Text-to-Speech)系统中多个评估指标的…

今日分享丨点亮这四个技能,你也可以成为可视化专家

引言 以大数据、人工智能等为代表的新质生产力时代已悄然而至,央企、国企逐步意识到数据资源展示对于经营管理的重要性和紧迫性。数据可视化成为连接用户与数据的桥梁,藉由设计师的巧手,把复杂抽象的数据以基于管理需求,转化为直…

PAT B1018.锤子剪刀布

题目描述 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图3-1所示。 现给出两人的交锋记录,请统计双方的胜、平、负次数,并给出双方分别出什么手势的胜算最大。输入格式 第一行给出正整数N(≤10),即双方交锋的次数。随后N行,每行给…

探索Web Components

title: 探索Web Components date: 2024/6/16 updated: 2024/6/16 author: cmdragon excerpt: 这篇文章介绍了Web Components技术,它允许开发者创建可复用、封装良好的自定义HTML元素,并直接在浏览器中运行,无需依赖外部库。通过组合HTML模…

Top10在线音频剪辑软件,你了解几款?(免费分享)

多年来,随着音乐制作人和音频工程师的需求不断增长,音频剪辑软件领域经历了巨大的发展。最新的音频剪辑软件提供了从基本录制到最终发布所需的一切功能。其中一些软件专为播客设计,一些软件是免费的,并且一些软件提供了出色的音效…

python读取excel中的图片超链接,批量下载到本地

1、代码 import xlrd import requestsread_path C:\\Users\\asus\\Desktop\\大法\\公务员\\国考\\行测\\1-推理判断\\URLs.xlsx bk xlrd.open_workbook(read_path) shxrange range(bk.nsheets) sh bk.sheet_by_name("Sheet2") nrows sh.nrows ncols sh.ncols …

【自撰写】【国际象棋入门】第6课 常见术语分析(一)吃双和抽将

第6课 常见术语分析(一)吃双和抽将 本次课中,我们介绍几种最为常见和常用的(单步棋形成)的局面、术语并对其进行简单的分析。一般说来,这些局面都会给予一方以“立竿见影”的优势,或者引向之后…

“鸿蒙开发之图片下载”--案例问题整理

鸿蒙开发之图片下载 关于以上连接中案例demo使用问题整理如下图 而且在写这个案例的时候记得添加权限 "requestPermissions":[{"name" : "ohos.permission.INTERNET"}]

Java多线程设计模式之不可变对象(Immutable Object)模式

简介 多线程共享变量的情况下,为了保证数据一致性,往往需要对这些变量的访问进行加锁。而锁本身又会带来一些问题和开销。Immutable Object模式使得我们可以在不加锁的情况下,既保证共享变量访问的线程安全,又能避免引入锁可能带…

20240619在飞凌OK3588-C的Linux R4系统下查找MIPI YUV摄像头的csi size err

20240619在飞凌OK3588-C的Linux R4系统下查找MIPI YUV摄像头的csi size err 2024/6/19 14:00 缘起,公司使用LVDS OUT的机芯,4LANE的LVDS输出。1920x108030分辨率(1080p/30) 通过FPGA转换为2LANE的MIPI OUT之后进RK3588/OK3588-C。…

sqlite3指令操作-linux

1.查看当前数据库位置 2.查看当前数据库文件下有哪些表 3.显示 某表创建时的SQL语句 4.打开、关闭显示列标题; 5.列对齐显示 6.列以‘,’分隔显示 .separator 7.查询表信息 8.插入消息 9.删除某一行内容 10.修改某行某列内容 11.修改表名字 alter tab…