android中apk文件的签名认证

目录

基础

签名和校验的大体过程

安全性

签名相关命令

Apk签名机制的两种选择


基础

Android提供了两种对Apk的签名方式,一种是基于JAR的签名机制,另一种是基于Apk的签名机制,它们的主要区别在于使用的签名文件不一样:jarsigner工具使用keystore文件进行签名;apksigner工具除了支持使用keystore文件进行签名外,还支持直接指定pem证书文件和私钥进行签名。

keystore是一个密钥库,它用于存储多对私钥和证书,keystore的密码是用于保护keystore本身的,一对私钥和证书是通过alias来区分的。keystore文件是以.jks结尾。

而证书格式是:X.509;证书可以有多种编码格式:常用的有两种:pem(Privacy Enhanced Mail)和der(Distinguished Encoding Rules)。

apksigner和jarsigner是支持使用多个证书对Apk进行签名的。

签名和校验的大体过程

签名是:对数据用摘要算法生成摘要,然后使用秘钥对摘要进行加密得到签名信息,然后将证书(包含签名信息,公钥)和数据放在一块儿。

验证是:对数据使用同一套摘要算法生成摘要,然后使用证书中的公钥对签名解密,然后比对密文和摘要是否一样。
 

安全性

Apk的证书通常的自签名的,也就是由开发者自己制作,没有向CA机构申请。Android在安装Apk时并没有校验证书本身的合法性,
只是从证书中提取公钥和加密算法,这也正是对第三方Apk重新签名后,还能够继续在没有安装这个Apk的系统中继续安装的原因。

应用市场应该帮会验证证书的合法性。

如果数字签名和公钥(通常都在数字证书中)一起被篡改,接收方无法得知,还是会校验通过。从而数字证书的合法性很重要。

签名相关命令

#jarsigner签名
jarsigner -keystore keystore_file -signedjar signed.apk unsigned.apk alias_name -storepass pwd


#apksigner签名
java -jar signapk.jar cert.x509.pem private.pk8 unsigned.apk signed.apk


#查看keystore文件
keytool -list  -v -keystore keystore_file -storepass pwd


#查看apk证书
keytool -printcert -jarfile apk


#查看DER格式证书(META-INFO/CERT.RSA)
openssl pkcs7 -inform DER -in CERT.RSA -noout -print_certs -text


#查看PEM格式证书
openssl x509 -in cert.x509.pem -text -noout


#apksigner检查apk是否签名,以及查看证书SHA1值
apksigner verify -v --print-certs● jarsigner签名
jarsigner -keystore keystore_file -signedjar signed.apk unsigned.apk alias_name -storepass pwd


#apksigner签名
java -jar signapk.jar cert.x509.pem private.pk8 unsigned.apk signed.apk


#查看keystore文件
keytool -list  -v -keystore keystore_file -storepass pwd


#查看apk证书
keytool -printcert -jarfile apk


#查看DER格式证书(META-INFO/CERT.RSA)
openssl pkcs7 -inform DER -in CERT.RSA -noout -print_certs -text


#查看PEM格式证书
openssl x509 -in cert.x509.pem -text -noout


#apksigner检查apk是否签名,以及查看证书SHA1值
apksigner verify -v --print-certs

Apk签名机制的两种选择

JAR签名机制和V2签名机制,将这里 和 这里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值