首页 > 其他分享 >Android系统签名简介

Android系统签名简介

时间:2024-07-02 15:35:54浏览次数:1  
标签:CERTIFICATE releasekey apk x509 简介 pem 签名 Android

apk的签名,简单说开发者可以通过签名 对应用进行标识和更新。包名在一个设备上是唯一的,这样可以避免被相同包名应用随意覆盖安装。这是一个非常重要的安全功能。
系统中的签名文件,也是对系统中应用进行签名,编译应用是可以指定签名类型。

 

下面介绍的是Android系统中的签名相关内容。

 

Android系统中的主要签名文件

media.pk8,media.x509.pem;platform.pk8,platform.x509.pem;releasekey.pk8,releasekey.x509.pem;shared.pk8,shared.x509.pem;testkey.pk8,testkey.x509.pem。

 

Android系统中的签名文件的路径

build/target/product/security/目录下。

 

编译时签名文件的配置

在Android.mk通过设置LOCAL_CERTIFICATE实现。如:LOCAL_CERTIFICATE := platform即选择platform来签名。
注:预置无源码的apk应用时,很多时候仍然使用原本第三方签名,LOCAL_CERTIFICATE := PRESIGNED。

 

.pk8和.x509.pem的区别

.pk8就是私钥文件,用于对apk进行签名。这个私钥需要保密保存,不能公开。
.x509.pem是证书文件,相当于公钥。这个可以公开,主要用于验证某个apk是否由相应的私钥签名。

 

系统不同签名文件的区别

简介:

  • sharedUserId

每个apk或文件,系统都会分配属于自己的统一的用户ID(UID),创建沙箱保证其他应用的影响或影响其他应用。如:一般应用只能访问自己包名下的文件(/data/data/pkgname),不能反问其他包名下的,其他应用也访问不了自己包名下的文件。
sharedUserId,拥有同一user id的应用 之间就可以共享数据库和文件,相互访问。这些应用可以运行在同一进程,也可以运行不同进程。

  • sharedUserId与签名文件

只有拥有相同sharedUserId标签的,且拥有相同签名的 应用才能分配相同的用户ID,实现数据共享。如果仅仅拥有相同sharedUserId标签,是无法确保安全的,也很容易被非法利用。

系统中5类签名文件说明

  • platform:平台的核心应用签名,签名的apk是完成系统的核心功能。这些apk所在的进程UID是system。manifest节点中有添加android:sharedUserId="android.uid.system"。
  • media: 这个签名的apk是media/download的一部分。manifest节点中有添加android:sharedUserId="android.media"。
  • shared:这个签名的apk可以和home/contacts进程共享数据。manifest节点中有添加android:sharedUserId="android.uid.shared"。
  • testkey/releasekey:平台默认key。在编译中未指定LOCAL_CERTIFICATE的,默认是用testkey。因为testkey是公开的,任何人都可以获取,不安全,所以一般使用 自己创建releasekey作为默认key。

 

修改平台默认签名

  • build/core/config.mk路径下,修改下面变量为:

DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/releasekey
或者使用宏控选择。

  • system/sepolicy/private/keys.conf 和 system/sepolicy/prebuilts/api/{apilevel}/private/keys.conf下,修改:
-ENG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
-USER : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
-USERDEBUG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
+ENG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
+USER : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
+USERDEBUG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
  • build/core/core/Makefile下修改变量为:

BUILD_VERSION_TAGS = release-keys
或者使用宏控选择。

 

平台签名的创建

在工程目录下执行下面命令就可以生成一套platform,shared,media,releasekey签名文件:

subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/[email protected]'
mkdir ~/.android-certs
for x in releasekey platform shared media; do \
./development/tools/make_key ~/.android-certs/$x "$subject"; \
done


注:

  • 生成是用工程中的./development/tools/make_key脚本,依次生成
  • subject中参数的含义:

C ---> Country Name (2 letter code)
ST ---> State or Province Name (full name)
L ---> Locality Name (eg, city)
O ---> Organization Name (eg, company)
OU ---> Organizational Unit Name (eg, section)
CN ---> Common Name (eg, your name or your server's hostname)
emailAddress ---> Contact email address

  • 生成签名文件过程,一般按回车,若输入密码后面签名apk需要手动输入。

 

查看签名apk的签名信息

keytool -printcert -jarfile xxx.apk
使用这个命令能够查看apk所使用签名的相关信息,如下图所示

 

使用系统签名文件直接给apk签名

java -Djava.library.path=. -jar signapk.jar xxx.x509.pem xxx.pk8 beforesign.apk aftersign.apk
如下示例,
将app-debug.apk使用releasekey签名,签名后的apk名字为app-debug_release.apk。
注意路径,如 signapk.jar路径在out/host/linux-x86/framework/signapk.jar,可以拷贝出来。平台签名文件路径上面已经讲过。如果出现报错,多注意下提示,调整即可。
java -Djava.library.path=. -jar signapk.jar releasekey.x509.pem releasekey.pk8 app-debug.apk app-debug_release.apk

 

转自:https://www.cnblogs.com/fanglongxiang/p/12445810.html

标签:CERTIFICATE,releasekey,apk,x509,简介,pem,签名,Android
From: https://www.cnblogs.com/terrorists/p/18143549

相关文章

  • Android SurfaceFlinger——创建Surface(二十一)
           通过前面的篇文章我们简单了解了Surface和Layer,并且知道了SurfaceComposerClient的createSurface()方法最终创建的其实是一个Layer,这里我们来看一下真正的获取Surface的方法。一、获取Surface       通过系统动画的播放流程中我们知道真正......
  • Android super.img结构及解包和重新组包
    Androidsuper.img结构及解包和重新组包从Android10版本开始,Android系统使用动态分区,system、vendor、odm等都包含在super.img里面,编译后的最终镜像不再有这些单独的image,取而代之的是一个总的super.img.1.基础知识1.1为什么用super分区代替独立的分区?传统的分区方......
  • 5个步骤教你如何申请代码签名证书
    代码签名(CodeSigning)是一种安全技术,用于验证软件的来源和完整性。它通过对软件代码进行数字签名,确保用户在下载或安装软件时,能够确认该软件未被篡改,并且确实来自其所声明的开发者或发行商。这对于保护用户免受恶意软件侵害、维护软件分发的可信度至关重要。一、代码签名的过......
  • 关于AndroidStudio中的onCreate方法
    onCreate方法是Android应用程序中的一个生命周期方法,它是每个Activity(活动)都必须实现的方法之一。具体来说,它是在Activity第一次创建时调用的方法,用于完成一些初始化设置和布局加载工作。主要作用设置布局:通过调用setContentView方法来加载指定的布局文件,将界面内......
  • RK3568 android13 预置APK
    现象:需要预置一个测试APK,按照以往得方法,将APK放到device/rockchip/rk356x/rk3568_t/preinstall目录下面。然后编译成新得固件。发现桌面没有显示APK。 查看OUT目录下面有预置得APK,out/target/product/rk3568_t/odm/bundled_persist-app/autotest/autotest.apk。说明APK是有......
  • mysql数据库简介
    一、数据库介绍1.数据库基本概念数据(Data)描述事物的符号记录包括数字,文字、图形、图像、声音、档案记录等以“记录”形式按统一的格式进行存储表将不同的记录组织在一起用来存储具体数据数据库表的集合,是存储数据的仓库以一定的组织方式存储的相互有关的数据集合数据......
  • Android 监听网络状态变化(无切换中间态版)
    需求:获取当前的网络状态与类型(WIFI、数据流量)监听网络状态真正变化监听网络类型发生变化业务场景:用户打开App时、使用过程中,出现无网络时,显示Toast提示。但当wifi、数据流量互相切换的过程中不要有提示。下载功能支持检测到用户连接上wifi时开启静默下载,当换成数据......
  • Android应用启动流程一次看透
    1.1、冷启动和热启动冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,然后再根据启动的参数,启动对应的进程组件,这个启动方式就是冷启动。热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然......
  • Android系统之System Server大纲
    前言SystemServer是android基本服务的提供者,是android系统运行的最基本需求,所有server运行在一个叫system_process的进程中,system_process进程是androidjava虚拟机跑的第一个进程,从Zygote创建而来,是andorid系统最重要的java虚拟机。可以说,整个android系统的业务都是围绕syste......
  • Android Gradle 开发与应用 (三): 依赖管理与版本控制
    目录1.依赖管理的重要性1.1依赖的类型1.2Gradle中的依赖声明2.版本控制的策略2.1固定版本与动态版本2.2版本冲突的解决3.Gradle插件的使用3.1常用的Gradle插件3.2自定义插件4.多模块项目中的依赖管理4.1模块间依赖4.2公共依赖5.依赖版本管理的最......