Android系统安全 — 5.1-APK签名机制原理

1. 什么是签名和数字证书

签名就是在摘要(采用单向Hash函数将需要加密的明文“摘要”成一串固定长度的密文)的基础上再进行一次加密,对摘要加密后的数据就可以当作数字签名,在安装Apk需要对签名进行验证,验证通过才能继续安装。

数字证书是身份认证机构(Certificate Authority)颁发的,包含了以下信息

  • 证书颁发机构
  • 证书颁发机构签名
  • 证书绑定的服务器域名
  • 证书版本、有效期
  • 签名使用的加密算法(非对称算法,如RSA)
  • 公钥 等

 2. 证书格式

keystore文件:根据编码不同keystore文件分很多种 主要是der和pem格式,Android使用的是Java标准keystore格式JKS(Java Key Storage),以文件名以.jks结尾, jks使用的der格式。

  • DER(Distinguished Encoding Rules)

    二进制格式,所有类型的证书和私钥都可以存储为der格式。

  • PEM(Privacy Enhanced Mail)

    base64编码,内容以—–BEGIN xxx—– 开头,以—–END xxx—– 结尾,中间内容为一串数据和字母。

3. APK的签名方式

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

注意:通过keytool或者AS生成一个keystore的时候(签署您的应用),除了要输入keystore的密码外,还要输入一个alias和key的密码,因为keystore是一个密码库,支持使用多个证书对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

注:  这是参考相关文档总结出的精华,若有侵权问题,请立即联系我删除该文档

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值