android签名制作签名文件(代码片段)

Jackchen随心 Jackchen随心     2022-12-22     547

关键词:

你可能想知道 通过这篇博客可以解决哪些问题以及学到什么:

  1.公司开发一个新的app,如何创建一个应用签名?

  2.为了安全性,Android系统不想使用Google给的原生签名,如何定制系统签名?

这篇博客介绍了如何制作签名文件,首先介绍Android开发中使用到的签名文件类型,然后介绍系统签名如何制作,最后介绍不同IDE用到的签名文件如何制作。

目录

一、Android的签名文件有三种类型,分别在以下情况使用

1.  jks: 用于Android Studio编译

2.  keystore: 用于Eclipse编译

3.  pk8/x509.pem   : 用于Android系统的编译

二、制作pk8/x509.pem格式系统签名文件

1.准备环境

2.制作过程

3.使用自定义签名

4.检查自定义签名 

三、制作jks格式的签名文件

四、制作keystore格式的签名文件


一、Android的签名文件有三种类型,分别在以下情况使用

1.  jks: 用于Android Studio编译

全称为Java key store,jks也是Android Studio中创建签名文件的格式

2.  keystore: 用于Eclipse编译

最早开发Android的时候的签名文件,目前开发Android都使用AS,而AS也兼容keystore.

3.  pk8/x509.pem   : 用于Android系统的编译

这个是系统的签名文件,同样也可以给APK签名

二、制作pk8/x509.pem格式系统签名文件

1.准备环境

需要在linux系统中,且有编译Android源码的环境

2.制作过程

1)生成签名文件

要对Android系统进行签名,需要生成四种类型的key文件:

  • a) releasekey
  • b) media
  • c) shared
  • d) platform

我们就拿releasekey 为例简单介绍下生成过程

使用Android源码中自带的make_key工具来生成签名,路径为development/tools/make_key 

在Android系统源码根目录下,新建make_key_security目录,进入到该目录,执行下面的命令

  ../development/tools/make_key releasekey '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'

执行命令时都会提示输入密码,这时不要输入密码,直接按Enter健;你想想如果在编译Android系统过程中要你不断输入密码进行确认,你是不是会疯掉!!!如下就会在make_key_security目录中生成密钥对 releasekey.pk8 (私钥) / releasekey.x509.pem (公钥)

Jack:~/aosp/make_key_security$ ../development/tools/make_key releasekey '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
Enter password for 'releasekey' (blank for none; password will be visible): 
creating releasekey.pk8 with no password
Generating RSA private key, 2048 bit long modulus (2 primes)
....................................................................................................+++++
....+++++
e is 65537 (0x010001)
Can't load /home/ecarx/.rnd into RNG
139895179936192:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/home/ecarx/.rnd

Jack:~/aosp/make_key_security$ ls
releasekey.pk8  releasekey.x509.pem

同样步骤将命令中的releasekey换成 media/shared/platform,然后执行,生成的所有秘钥对如下:

Jack:~/aosp/make_key_security$ ls -l
总用量 40
-rw------- 1 ecarx ecarx 1217 8月  14 23:45 media.pk8
-rw-rw-r-- 1 ecarx ecarx 1464 8月  14 23:45 media.x509.pem
-rw------- 1 ecarx ecarx 1218 8月  14 23:44 platform.pk8
-rw-rw-r-- 1 ecarx ecarx 1464 8月  14 23:44 platform.x509.pem
-rw------- 1 ecarx ecarx 1218 8月  14 23:30 releasekey.pk8
-rw-rw-r-- 1 ecarx ecarx 1464 8月  14 23:30 releasekey.x509.pem
-rw------- 1 ecarx ecarx 1217 8月  14 23:45 shared.pk8
-rw-rw-r-- 1 ecarx ecarx 1464 8月  14 23:45 shared.x509.pem

2)介绍一下make_key的参数   

../development/tools/make_key releasekey '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'

这里要顺便介绍下make_key的参数。第一个参数是要生成key的名字第二个参数是关于你公司的信息。key的名字很好理解,就是前面提到的4中类型的key,公司信息的参数比较多,它们的含义如下:

KeyDescriptionExample
CWhat is the two-letter country code for this unit?US
STWhat is the name of your State or Province?California
LWhat is the name of your City or Locality?Mountain View
OWhat is the name of your organization?Android
OUWhat is the name of your organizational unit?Android
CNWhat is your first and last name?Android
emailAddressWhat is the email address?android@android.com

3.使用自定义签名

1) 修改 /build/core/config.mk 中定义变量:

DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/releasekey  

2) 修改 /build/core/Makefile 中定义变量:

ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/releasekey)
BUILD_KEYS := release-keys
else
BUILD_KEYS := dev-keys
endif

4.检查自定义签名 

查看签名文件信息

Jackchen:~/aosp/make_key_security$ keytool -printcert -file releasekey.x509.pem 
所有者: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
发布者: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
序列号: 2c5386028cf9208120dcb735e63e6ce31e57faf7
生效时间: Sat Aug 14 23:30:08 CST 2021, 失效时间: Wed Dec 30 23:30:08 CST 2048
证书指纹:
     SHA1: 6A:72:69:63:9D:07:13:09:35:9C:22:31:6C:A1:C8:74:CF:FE:F1:8B
     SHA256: 45:AF:80:A8:10:AD:80:C2:71:C9:97:8A:D6:CC:FA:D0:AB:69:BA:B3:CE:80:94:D5:D0:70:63:E8:71:B0:06:CE
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

build.prop中可以查看到变量:

  ro.build.tags=release-keys  

三、制作jks格式的签名文件

1.用Android Studio生成签名文件

这个网上教材很多,我引用了两位博主的文章

https://blog.csdn.net/tzhenxiong/article/details/109901468

https://blog.csdn.net/anyanyan07/article/details/53493785

之前我会一直困惑为什么创建jks签名文件时要输入两套秘密(不是确认秘密哦),后来经过查阅资料和实操验证终于弄懂了,这里和大家分享以下:

你可以将jks理解为一个仓库,一个密钥仓库,其实keystore这个名字就很直观,访问这个仓库需要一个秘密; 这个仓库里面可以存放很多很多key,所以每一个key都需要有一个自己的名字alias,访问每个key都需要密码aliaspasswd,下面通过示意图说明:

 2.从系统签名文件转化而来

1)获取android平台key
   取源码目录build\\target\\product\\security下platform.pk8 platform.x509.pem放到一个目录中 

2)生成platform.pem 
   openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem

3)生成pkcs12
   openssl pkcs12 -export -in  platform.x509.pem -inkey platform.pem -out platform.p12  -password pass:android -name androiddebugkey

<pass:android> 对应pkcs12的密码,下一步需要用到


4)生成debug.jks
   keytool -importkeystore -deststorepass android -destkeystore platform.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass android -alias androiddebugkey

<-srcstorepass android>        上一步生成的pkcs12密码
<-deststorepass android>     jks/keystore的密码
<-alias androiddebugkey>    key的别名

以上步骤就生成了platform.jks就直接可以用于Android Studio签名了,用到的命令如下:

openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
openssl pkcs12 -export -in  platform.x509.pem -inkey platform.pem -out platform.p12  -password pass:android -name androiddebugkey
keytool -importkeystore -deststorepass android -destkeystore platform.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass android

另外还将以上这些命令写成了一个脚本,只要将platform.pk8 platform.x509.pem放到对应目录下,然后运行脚本,输入对应参数即可,下载连接

四、制作keystore格式的签名文件

1.从系统签名文件转化而来

    和制作jks的步骤相同

如果要查看生成的签名文件里面的签名信息,可以参考我的另外一篇博客

Android签名 (一) 查看签名信息

apk签名制作以及签名中的sha信息获取(代码片段)

一制作.jks或者.keystore签名方便一点的操作就是在AndroidStudio里面通过图形界面来制作了,这里使用命令行来制作。keytool.exe-genkey-alias<key0>-keyalgRSA-validity10000-keystore<keyname.keystore>上面的keytool在安装了JDK之后就有了,跟java/j... 查看详情

详解android项目配置签名文件的完整流程(代码片段)

...名文件配置到项目中,首先需要创建一个签名文件。androidstudio为我们提供了图形化创建方式,这里简单赘述一下࿱ 查看详情

对android应用签名(代码片段)

  Android使用包名作为唯一标识,当在同一台手机安装两个包名相同的应用,后安装的应用就会覆盖前面的应用(签名相同的情况下)。  签名有两个主要作用:    1.确定发布者身份。由于应用开发者可以通过使用相同... 查看详情

android studio,如何为发布版本制作签名的 apk(使用 KTS 构建文件的 gradle)

】androidstudio,如何为发布版本制作签名的apk(使用KTS构建文件的gradle)【英文标题】:androidstudio,howtomakesignedapkforreleasebuild(gradleusingKTSbuildfiles)【发布时间】:2020-07-0423:17:40【问题描述】:想要运行发布版本(它是具有多个lib模... 查看详情

andorid进行签名的方式(代码片段)

目录Android签名的简介1.Android签名的作用2.签名的方式2.1签名方式的比较3.在AS上操作的一般步骤(手动签名)3.1在AS操作步骤如下图 4.apk常用的签名方法(系统签名)有两种Android签名的简介生成证书签名apk文件1.Android签名的作用确保信... 查看详情

andorid进行签名的方式(代码片段)

目录Android签名的简介1.Android签名的作用2.签名的方式2.1签名方式的比较3.在AS上操作的一般步骤(手动签名)3.1在AS操作步骤如下图 4.apk常用的签名方法(系统签名)有两种Android签名的简介生成证书签名apk文件1.Android签名的作用确保信... 查看详情

java获取的android的16进制签名(非密钥库文件)(代码片段)

查看详情

android签名验证与反调试机制的对抗技术(代码片段)

...2.6时间差异检测2.7内置函数检测2.8调试断点检测总结前言Android的APK文件为了防止被篡改和重打包,经常会做签名校验来保证自身完整性,当程序被篡改后将提示用户或者直接退出运行。同时有些 查看详情

用python制作一个艺术签名小工具,给自己设计一个优雅的签名(代码片段)

生活中有很多场景都需要我们签字(签名),如果是一些不重要的场景,我们的签名好坏基本无所谓了,但如果是一些比较重要的场景,如果我们的签名比较差的话,就有可能给别人留下不太好的印象了,俗话说字如其人嘛,本... 查看详情

用tkinter制作签名设计窗口(代码片段)

效果如下:fromtkinterimport*fromtkinterimportmessageboximportrequestsimportrefromPILimportImage,ImageTkdefshow(root,enter):start_url=‘http://www.uustv.com/‘name=enter.get()ifnotname:messagebox.showinfo(‘警告 查看详情

android获取apk签名信息及md5指纹(代码片段)

1.获取APK的签名信息privateStringshowUninstallAPKSignatures(StringapkPath)StringPATH_PackageParser="android.content.pm.PackageParser";try//apk包的文件路径//这是一个Package解释器,是隐藏的//构造函数的参数只有一个,apk文件的路径//Pac 查看详情

android反编译代码,资源修改,重新签名(代码片段)

项目场景:修改版本号,修改App名字对于源码丢失服务器切换,且没有开发人员来说修改一些资源很麻烦,此文章就是为了简单的反编译修改一下App的资源文件以及简单代码的方案准备:1:apktool.jar,apktool.jar, A:下载地址 https://bitbu... 查看详情

android签名验证与反调试机制的对抗技术(代码片段)

...2.6时间差异检测2.7内置函数检测2.8调试断点检测总结前言Android的APK文件为了防止被篡改和重打包,经常会做签名校验来保证自身完整性,当程序被篡改后将提示用户或者直接退出运行。同时有些APP为了防止被攻击者动态... 查看详情

keystore文件(代码片段)

...keystore操作1.运行时签名文件路径(debug)de>/home/xiaoq/.android/debug.keystorede>2.生成签名文件(打包时使用)de>keytool- 查看详情

android安全笔记-android签名文件及初略架构(代码片段)

...ANIFEST.MF中的内容,还有MANIFEST.MF这个文件的hash摘要。Android框架简略图ÿ 查看详情

android.mk中对apk进行签名(代码片段)

...下几个属性值:默认的四种签名类型:四组默认签名供Android.mk在编译APK使用:1、testkey:普通APK,默认情况下使用。2、platform:该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试&#x 查看详情

android.mk中对apk进行签名(代码片段)

...下几个属性值:默认的四种签名类型:四组默认签名供Android.mk在编译APK使用:1、testkey:普通APK,默认情况下使用。2、platform:该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试&#x 查看详情

如何优雅的给你的apk文件打上签名(代码片段)

...xff1a;如何优雅的给你的APK文件打上签名历经千兴万苦开发Android应用后,将这个应用打包成APK文件发布到应用商店就可以让用户下载安装到他们的手机上。当然,不是所有的APK都能安装到手机上,Android系统要求只有签... 查看详情