Android签名 (二) 制作签名文件
你可能想知道 通过这篇博客可以解决哪些问题以及学到什么:
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/.rndJack:~/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:8BSHA256: 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生成签名文件
这个网上教材很多,我引用了两位博主的文章
在Android Studio创建keystore签名文件_TinkTan的博客-CSDN博客_android studio 创建keystore
Android Studio生成keystore签名文件_安妍妍的博客-CSDN博客_android studio 生成签名文件
之前我会一直困惑为什么创建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:<key_pwd> -name <key_alias>
<key_pwd> 签名key的密码,下一步需要用到(对应pkcs12的密码)
<key_alias> 签名key的别名,下一步需要用到
4)生成debug.jks
keytool -importkeystore -deststorepass <store_pwd> -destkeystore <store_name> -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass <key_pwd> -alias <key_alias>
<store_pwd> 签名文件(jks/keystore)的密码;
<store_name> 签名文件(jks/keystore)名称;
<key_pwd> 签名key的密码;
<key_alias> 签名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:key_password -name key_alias
keytool -importkeystore -deststorepass store_name -destkeystore debug.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass key_password -alias key_alias
另外还将以上这些命令写成了一个脚本,只要将platform.pk8 platform.x509.pem放到对应目录下,然后运行脚本,输入对应参数即可,下载连接
四、制作keystore格式的签名文件
1.从系统签名文件转化而来
和制作jks的步骤相同
如果要查看生成的签名文件里面的签名信息,可以参考我的另外一篇博客
Android签名 (一) 查看签名信息
Android签名 (二) 制作签名文件相关推荐
- Android签名 (三) 应用签名实操
你可能想知道 通过这篇博客可以解决哪些问题以及学到什么: 1.应用为什么要签名,应用签名有哪些好处? 2.如何对应用进行签名? 这篇博客介绍了为什么要对应用进行签名以及如何给应用签名. 目录 一.应用 ...
- 【Android签名机制详解】二:Android V1、V2、V3、V4签名方案
前言 书接上回[Android签名机制详解]一:密码学入门,在了解了消息摘要.非对称加密.数字签名.数字证书的基本概念后,我们趁热打铁.直奔主题,讲解签名在Android中的实际应用. 基础知识 An ...
- android cpp做成so库,Android增量更新(二)—制作合成文件so库
###前言 在上节中,我们已经学习了`Android增量更新`的实现原理,那么在Android开发的移动端,我们需要涉及到的其实是`文件合成`的这个流程. 那么,今天就来讲讲增量更新合成流程的实现吧. ...
- Android签名与认证详细分析之二(CERT.RSA剖析)
一.Android证书的格式 Android签名中证书的格式采用X.509标准的版本三,不过省略了一些内容. X.509证书格式如下图所示: 二.证书的格式示例 从Chrome浏览器中导出一个证书,打 ...
- android签名的应用-- 禁止未经授权签名的apk安装
点击打开链接 最近项目有需求: 只有使用特定签名签的apk才可以安装,其他任何apk都不能安装(root版,使用adb push进去的除外).n多度娘.google之后最终实现,把实现代码罗列一下,以 ...
- android digest 认证,探究 Android 签名机制和原理
背景 最近在调研一个测试工具的使用,在使用中发现被测试工具处理过的apk文件经安装后打开就会崩溃,分析崩溃日志后原因是签名不一致导致的. 说到Android中的签名,可能大家都知道签名的目的就是为了保 ...
- Android签名机制---签名过程
大神文章:http://blog.csdn.net/jiangwei0910410003/article/details/50402000 一.知识点 1.数据摘要(数据指纹).签名文件,证书文件 2 ...
- Android签名打包详解
一. Android签名有什么作用? 应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名.这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序.如果你采用 ...
- Android签名与校验过程详解
原文:https://blog.csdn.net/gulinxieying/article/details/78677487 目 录 一.签名与校验原理概要 2 1.数字签名简介 2 2. ...
- android签名方法,Android : apk系统签名的多种方法
方法一:使用自己的Android签名工具给apk重新签名: (1)该目录下有 media.pk8.media.x509.pem.platform.pk8.platform.x509.pem.share ...
最新文章
- android运动轨迹rungps_android运动轨迹rungps_Android使用百度地图API实现GPS步行轨迹...
- 福利 | 从生物学到神经元:人工神经网络 ( ANN ) 简介
- InfoPath 揭秘 (一)
- 修改wamp的apache默认端口80为8088以及www目录
- 我的中年危机来得很自然
- webuploader 怎么在react中_另辟蹊径搭建阅读React源码调试环境支持所有React版本细分文件断点调试...
- 手写jwt框架SSO
- makefile如何减小可执行文件的大小(没有用到的函数不参与链接)
- cass坡度土方计算案例_60度斜坡怎么计算_南方CASS土方计算方法—方格网法
- 程序员除了转行做管理,还可以做什么?
- 1062. 最简分数(20)-PAT乙级真题
- 《Unity 4 3D开发实战详解》一6.3 粒子系统
- 关于typedef的使用
- 【Vue.js】iconfont中unicode引用和unicode引用失败,无法显示icon
- Can‘t update has no tracked branch
- 城市停车难,如何破局?
- 考研词汇 用语言记忆
- PPT制作技巧汇总之图形对象与多媒体应用(office 2007)
- 好书推荐:《黑客秘笈:渗透测试实用指南》
- FDC2214调试笔记(1)——为什么FDC2214输出的会是0x00000000或者0xffffffff?