关键词:
你可能想知道 通过这篇博客可以解决哪些问题以及学到什么:
1.公司开发一个新的app,如何创建一个应用签名?
2.为了安全性,Android系统不想使用Google给的原生签名,如何定制系统签名?
这篇博客介绍了如何制作签名文件,首先介绍Android开发中使用到的签名文件类型,然后介绍系统签名如何制作,最后介绍不同IDE用到的签名文件如何制作。
目录
3. pk8/x509.pem : 用于Android系统的编译
一、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,公司信息的参数比较多,它们的含义如下:
Key | Description | Example |
C | What is the two-letter country code for this unit? | US |
ST | What is the name of your State or Province? | California |
L | What is the name of your City or Locality? | Mountain View |
O | What is the name of your organization? | Android |
OU | What is the name of your organizational unit? | Android |
CN | What is your first and last name? | Android |
emailAddress | What 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的步骤相同
如果要查看生成的签名文件里面的签名信息,可以参考我的另外一篇博客
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完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试 查看详情
android.mk中对apk进行签名(代码片段)
...下几个属性值:默认的四种签名类型:四组默认签名供Android.mk在编译APK使用:1、testkey:普通APK,默认情况下使用。2、platform:该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试 查看详情
如何优雅的给你的apk文件打上签名(代码片段)
...xff1a;如何优雅的给你的APK文件打上签名历经千兴万苦开发Android应用后,将这个应用打包成APK文件发布到应用商店就可以让用户下载安装到他们的手机上。当然,不是所有的APK都能安装到手机上,Android系统要求只有签... 查看详情