Android 创建自己的签名证书文件keystore,使用signapk.jar为apk以及zip文件签名

169 篇文章 4 订阅
原文链接: How to Sign Android APK or Zip Files 果你只是想知道如何签名及下载签名工具,请直接看“ 如何使用SignApk.jar来为一个apk或zip文件签名 ”部分。要创建自己的证书请从头看起。
准备知识:
    当你要发布一个软件或是自制的ROM时,你就需要一个使用了私钥的证书来为.apk或.zip文件进行签名。Android系统使用证书来识别软件作者和软件之间所建立的认证关系。做这个事情最经典的方式就是用keytool创建证书,然后使用jarsigner进行签名。但是本教程则会提供一个对于大多数人来说更为容易的方法,那就是使用一个名为SignApk.jar的工具。
    SignApk.jar是一个已包含在Android平台源码包中的工具,你可以在本贴的附件中下载。如果要使用SignApk.jar,你需要创建一个带有对应证书/公钥的私钥。而你可以使用 Openssl 来创建私钥/公钥对。在Unix/Linux系统中使用Openssl相对来说比较容易。对于Windows用户,你可以在本贴附件或 此链接 中下载Windows版本的Openssl。
如何使用OpenSSL创建私钥/公钥对(也就通常说的证书文件,有误勿怪)(Windows版本)
  • 下载附件中的openssl-0.9.8k_WIN32.zip http://slproweb.com/products/Win32OpenSSL.html
  • 将下载到的压缩包解压到你电脑上的任意位置(例如:C:\OpenSSL)
  • OpenSSL\bin文件夹下按顺序输入(使用CMD命令行工具,其中第2步会需要你输入一些信息,见图):
    1、openssl genrsa -out key.pem 1024
    2、openssl req -new -key key.pem -config C:\OpenSSL\openssl.cnf -out request.pem
    3、openssl x509 -req -days 9999 -in request.pem -signkey key.pem -out certificate.pem
    4、openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 -nocrypt   

 

openssl genrsa -out key_tmp.pem 1024
openssl req -new -key key_tmp.pem -config C:\OpenSSL\openssl.cnf -out request.pem
openssl x509 -req -days 9999 -in request.pem -signkey key_tmp.pem -out key.pem
openssl pkcs8 -topk8 -outform DER -in key_tmp.pem -inform PEM -out key.pk8 -nocrypt   

如果你的recovery不具备签名校验切换功能,那么用你自己生成的证书文件来给ROM签名,会提示签名校验失败。因为目前几乎所有的第三方recovery中所带的私钥都是testkey的。(附件中的GoAPK.zip里面所包含的证书文件已更新为testkey)
如何使用SignApk.jar来为一个apk或zip文件签名:
  • 下载附件中的GoAPK.zip
  • 将下载到的压缩包解压到你电脑上的任意位置(例如:C:\GoAPK)
  • 如果你的电脑上还没有安装JAVA环境,请下载并进行安装。
  • (如果你创建了自己的私钥/公钥对)复制certificate.pemkey.pk8到你解压得到的GoAPK文件夹中
  • 使用CMD命令行工具cd到GoAPK文件夹,然后输入:(对于我提供的包,只需要将要签名的文件放在GoAPK文件夹中,然后拖至对应的批处理文件上即可)
    java -jar signapk.jar certificate.pem key.pk8 your-app.apk  your-signed-app.apk
    或是
    java -jar signapk.jar certificate.pem key.pk8 your-update.zip your-signed-update.zip

查看签名信息:

生成keystore

keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore

1、查看 keystore  
$ keytool -list -keystore debug.keystore 
结果
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
androiddebugkey, Mar 21, 2013, PrivateKeyEntry, 
Certificate fingerprint (MD5): E0:F4:90:EE:CD:77:17:0E:B8:C4:AC:64:B2:F6:FC:83

2、查看三方应用或是系统应用签名
用winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERT.RSA文件
$ keytool -printcert -file META-INF/CERT.RSA

Owner: CN=Android Debug, O=Android, C=US
Issuer: CN=Android Debug, O=Android, C=US
Serial number: 514ab2e1
Valid from: Thu Mar 21 15:12:33 CST 2013 until: Sat Mar 14 15:12:33 CST 2043
Certificate fingerprints:

MD5:  E0:F4:90:EE:CD:77:17:0E:B8:C4:AC:64:B2:F6:FC:83

SHA1: 7F:E5:11:D8:37:4F:DA:D7:75:EA:A5:8C:47:06:85:95:6D:1D:3F:2B

Signature algorithm name: SHA1withRSA

Version: 3

3、给空白包签名

jarsigner -verbose -keystore [keystorePath] -signedjar [apkOut] [apkIn] [alias]


jarsigner命令格式:-verbose输出详细信息 -keystore密钥库位置 -signedjar要生成的文件 要签名的文件 密钥库文件
keystorePath参数代表keyStore的绝对路径,如D:\keystore
apkOut参数代表签名后的apk路径,如D:\signed.apk
apkin参数代表在腾讯应用中心下载的未签名apk,默认名称为tap_unsign.apk
alias参数代表签名用的alias名称(创建keyStore时所填写),如timdong

$ jarsigner -verbose -keystore debug.keystore -signedjar test2.apk tap_unsign1.apk timdong

Enter Passphrase for keystore: 
   adding: META-INF/MANIFEST.MF
   adding: META-INF/ANDROIDD.SF
   adding: META-INF/ANDROIDD.RSA
  signing: res/drawable/ic_launcher.png
  signing: res/layout/main.xml
  signing: AndroidManifest.xml
  signing: resources.arsc
  signing: classes.dex


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
好的,我可以帮你解答这个问题。以下是在Mac下使用re-sign.jarapk进行重签名的步骤: 1. 首先,你需要下载re-sign.jar并解压缩。可以在GitHub上找到该工具。 2. 然后,你需要安装Java环境。如果你已经安装了Java,可以跳过这一步。 3. 接下来,你需要下载Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files。这是因为默认情况下,Java只支持128位的密钥,而有些应用需要256位的密钥。你可以在Oracle官网上下载对应版本的JCE文件,并将其解压缩到$JAVA_HOME/jre/lib/security/目录下。 4. 现在,你需要将需要重签名apk文件keystore文件放到同一目录下。假设你的apk文件名为app.apkkeystore文件名为key.keystore。 5. 打开终端,进入到re-sign.jar所在的目录。然后执行下面的命令: ``` java -jar re-sign.jar app.apk key.keystore key_alias keystore_password key_password ``` 其中,key_alias是你之前创建keystore时设置的别名,keystore_password是keystore的密码,key_password是别名所对应的密钥的密码。 6. 稍等片刻,re-sign.jar会自动对apk进行重签名,并生成一个新的apk文件,名字类似于app-resigned.apk。 7. 最后,你可以使用jarsigner命令验证新apk文件是否已经成功重签名。执行下面的命令: ``` jarsigner -verify app-resigned.apk ``` 如果没有任何输出,说明重签名已经成功。 希望这个步骤能够帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值