本节只针对如何从零开始实现简单的打包签名

概要

debug.keystore:使用Android Studio直接编译运行时默认使用的签名证书,存放路径C:\Users.android

app-debug.apk:使用Android Studio直接编译时生成的apk文件,生成路径build/outputs/apk/debug/

V1(Jar Signature):

V2(Full APK Signature):

APK文件的校验指令:jarsigner -verbose -certs -verify 签名过的apk文件

Keytool生成JKS签名证书

cmd指令生成JKS签名证书:keytool -genkey -v -keystore aso.jks -alias aso -keyalg RSA -validity 9125

keytool:是一个Java数据证书的管理工具,已经集成在JDK中了,keytool 将密钥(key)和证书(certificates)存在一个keystore的文件中,或者是jks的文件

-genkey:执行的是生成数字证书操作,将在用户目录中创建一个默认.keystore文件或者.jks文件

-v:显示密钥库中的证书详细信息

-keystore aso.jks:生成的证书的文件名为"aso.jks"(自定义的证书名)

-alias aso.jks:证书的别名为"aso.jks"。(一般和上面的证书名名相同,可以不同,但要记好,签名时会用到)

-keyalg RSA:指定生成密钥文件采用的算法为RSA(可以是RSA、DSA,默认是DSA)

-validity 9125:指定证书的有效天数(365*25),时间到期之后证书将失效

-keysize:指定密钥长度

-storepass:指定密钥库的密码(获取keystroe信息所需的密码)

-keypass:指定别名条目的密码(私钥的密码)

dname:证书拥有者的信息。可以不用在命令中注明,会提示你输入(CN=aso, OU=aso, O=aso, L=aso, ST=aso, C=aso)

-export:将别名指定的证书导出到文件

-file:指定导出到文件的文件名称

-delete:删除密钥库中的某条目

-printcert:查看导出的信息

完整在指令中写好信息的cmd指令:keytool -genkey -v -keystore C:\Users\Aso\Desktop\jks\aso.jks -alias aso -keyalg RSA -validity 9125 -keypass 111111 -storepass 111111 -keysize 1024 -dname "CN=aso, OU=aso, O=aso, L=aso, ST=aso, C=aso"

cmd指令将JKS迁移到行业标准格式 PKCS12:keytool -importkeystore -srckeystore C:\Users\Aso\Desktop\jks\aso.jks -destkeystore C:\Users\Aso\Desktop\jks\aso.jks -deststoretype pkcs12

Android Studio生成JKS签名证书

AS版本信息

签名证书的生成

Android APP都需要我们用一个证书对应用进行数字签名,不然的话是无法安装到Android手机上的,平时我们调试运行到手机上时,是AS会自动使用默认的密钥和证书来进行签名;但是我们实际用于发布时则需要进行主动签名,那么我们的签名证书是怎么来的?下面图文结合会手把手教你

到此,前面文件已经生成在我们指定的目录下了

备注:一个签名文件,是可以被多个APP项目进行签名打包使用的

签名打包

调试运行时的打包

我们上面有提到使用AS直接编译进行调试运行时,使用的是默认的签名文件进行签名,这时候会在build/outputs/apk/debug/目录下生成一个app-debug.apk,这个就是使用谷歌默认的签名文件进行签名打包的

发布编译时的打包

当我们已经开发完成之后,要实际放到应用市场上去进行发布时,就需要使用正式签名文件编译Release包,其中可以使用AS的操作界面进行打包,也可以使用Gradle命令进行打包,以下是AS可视化操作进行打包步骤

根据需要,可以签名打包出Debug版本和Release版本

编译出来的目录地址:

最后,我们初次把包打出来之后,当然要验证是否有签名成功

jarsigner -verbose -certs -verify 签名过的apk文件

AS调试运行时包验证结果如下

C:\Users\Aso>jarsigner -verbose -certs -verify C:\Users\Aso\Desktop\apk\app-debug.apk

s = 已验证签名

m = 在清单中列出条目

k = 在密钥库中至少找到了一个证书

i = 在身份作用域内至少找到了一个证书

没有清单。

jar 未签名。

C:\Users\Aso>

使用自定义生成的签名证明进行签名Release包时,结果证明不管jks是否迁移到行业标准格式 PKCS12,在对apk进行签名校验时均会出现如下内容(裁剪过的),原因待查! (详细内容传送门)

Microsoft Windows [版本 10.0.18362.1082]

(c) 2019 Microsoft Corporation。保留所有权利。

C:\Users\Aso>jarsigner -verbose -certs -verify C:\Users\Aso\Desktop\jks\release\app-release.apk

sm 2180 Fri Nov 30 00:00:00 CST 1979 AndroidManifest.xml

>>> 签名者

X.509, CN=aso, OU=aso, O=aso, L=aso, ST=aso, C=aso

[证书的有效期为20-9-28 下午11:15至45-9-22 下午11:15]

[无效的证书链: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]

sm 6 Fri Nov 30 00:00:00 CST 1979 META-INF/androidx.activity_activity.version

>>> 签名者

X.509, CN=aso, OU=aso, O=aso, L=aso, ST=aso, C=aso

[证书的有效期为20-9-28 下午11:15至45-9-22 下午11:15]

[无效的证书链: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]

......

s = 已验证签名

m = 在清单中列出条目

k = 在密钥库中至少找到了一个证书

i = 在身份作用域内至少找到了一个证书

- 由 "CN=aso, OU=aso, O=aso, L=aso, ST=aso, C=aso" 签名

摘要算法: SHA-256

签名算法: SHA256withRSA, 1024 位密钥

jar 已验证。

警告:

此 jar 包含其证书链无效的条目。原因: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

此 jar 包含其签名者证书为自签名证书的条目。

此 jar 包含的签名没有时间戳。如果没有时间戳, 则在其中任一签名者证书到期 (最早为 2045-09-22) 之后, 用户可能无法验证此 jar。

签名者证书将于 2045-09-22 到期。

C:\Users\Aso>

java apk签名证书_Android签名证书的生成相关推荐

  1. java apk安装路径_android apk安装过程源码解析

    前言: 前一篇博客分析了一下PackageManagerService是如何解析apk的以及我们如何解析未安装apk中的androidManifest.xml文件.解析完肯定要安装的,索性写一篇关于a ...

  2. java数字签名(签名生成,用证书验证签名)

    部分签名原理 http://blog.csdn.net/lijiecong/archive/2010/12/24/6096289.aspx (转载序:网上找的好文章,一篇就把我找了几天的所有东西都概括 ...

  3. 使用java进行SSL证书的签名与签验

    一.签名与签验的含义 签名:客户端使用私钥对字符串加密,得到一个加密后的字符串 签验(签名验证):服务端使用公钥对字符串加密,验证加密后的字符串是否和客户端签名后一样 二.创建私钥.证书等文件 在li ...

  4. Java使用BouncyCastle进行基于ECDSA算法的椭圆曲线secp256r1证书自签名

    一.    基础         BouncyCastle,是一个用于Java平台的轻量级开源密码包.目前除了支持Java外,也支持C#.授权遵循MIT协议.         BouncyCastle ...

  5. 商户证书序列号有误。请使用签名私钥匹配的证书序列号 java

    这篇文章就不写那些外面都有的代码,就写一个遇到的坑吧,在httpclient请求商家转账到零钱的api时,微信总是返回商户证书序列号有误.请使用签名私钥匹配的证书序列号,在网上找了各种帖子也没找到方法 ...

  6. java 1.8签名apk_给Android的APK程序签名和重新签名的方法

    签名工具的使用Android源码编译出来的signapk.jar既可给apk签名,也可给rom签名的.使用格式: java –jar signapk.jar [-w] publickey.x509[. ...

  7. 安卓APP证书Android签名证书.keystore文件制作生成

    将app发布到应用宝时,而上传安装包时提示如下图时, 但您或您的团队从未上传该应用,您可以通过认领功能认领应用.认领成功后该应用会自动转入您的账户下,同时保留应用全部数据,您可以在应用管理中进行管理. ...

  8. 使Chrome接受自签名的本地主机证书

    我已经为本地主机CN创建了一个自签名SSL证书. 如预期的那样,Firefox在最初抱怨它之后接受了该证书. 但是,即使将证书添加到"受信任的根"下的系统证书存储中,Chrome和 ...

  9. C# 微信证书签名,WECHATPAY2-SHA256-RSA2048 签名方式

    今日在做微信支付对接相关事宜,需要用到证书做签名 C#相关读取证书,获得证书私钥,再去做RSA256签名,代码如下 public static class WeChartPaySecurityHelp ...

最新文章

  1. ASP.NET 163 smtp服务器响应为:User has no permission
  2. 运维 + 数据 + AI=企业数字化难题的应对之法?
  3. CentOS7 安装 mysql8
  4. linux中sleep再循环里,Linux sleep 语句以及循环 测试负载
  5. 识别Java中的代码气味
  6. htc one m7 linux驱动,HTC One M7官方RUU固件包(可救砖)
  7. 使用transform实现手风琴布局
  8. python调用sdk接口_Python SDK使用说明
  9. 怎么批量删除html里的字段,shp文件怎么删除字段
  10. 用扫码枪收款钱到哪里_如何申请微信官方收款码(信用卡收款)
  11. 【《Real-Time Rendering 3rd》 提炼总结】(十) 第十一章 · 非真实感渲染(NPR)相关技术总结
  12. 1.4.4 Performance Measures
  13. 功能测试数据测试之因果图分析方法
  14. html如何在搜索栏里加放大镜,css 如何在html页面上输出一个“放大镜”形状呢?...
  15. 北大计算机研究生有多神仙,北大考研成绩公布,还上“热搜”,这都是些什么“神仙分数”?...
  16. 四款功能强大的优质app合集,总有一个能给你带来帮助!
  17. DSL 领域特定语言
  18. folly库安装(1)cmake和gcc的安装、升级
  19. facetune2 android,facetune2
  20. 全球与中国Autodesk渠道合作伙伴市场现状及未来发展趋势

热门文章

  1. 如何生成github上的动态gif图
  2. PowerBI:关于PBIX,PBIT及PBIDS
  3. 产品经理学项目管理05:项目管理的目标
  4. 美国FDA注册,罐头食品FDA注册
  5. 计算机毕业设计之仿12306火车票购票平台
  6. Docker制作base镜像
  7. Apache中间件漏洞深析
  8. 【算法设计zxd】第四章蛮力法 1.枚举法 02穷举查找
  9. Win10电脑桌面上没有‘我的电脑’图标
  10. 文本文档改扩展名之后没反应、格式不变之解决办法