• 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/emailAddress=android@android.com'
    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

  • 相关阅读:
    IPC(进程间通信)
    进程和线程是什么
    虚拟内存
    寄存器是什么?内存、寄存器和存储器的区别
    计算机资源 —硬件资源分配
    如何将一个网页中自己想要的数据导入到Excel表格中
    Putty的安装和使用
    SQL中的ON DUPLICATE KEY UPDATE使用详解
    sql:主键(primary key)和唯一索引(unique index)区别
    直接扩频通信(上)理论基础
  • 原文地址:https://www.cnblogs.com/fanglongxiang/p/12445810.html
Copyright © 2020-2023  润新知