Android签名机制用法详解

本文介绍了Android平台上的签名机制,包括其在应用升级和权限检查中的作用。详细讲解了如何使用keytool生成密钥库和使用jarsigner工具对APK进行签名的方法。

原文链接

Android独有的安全机制有:权限机制,签名机制,混淆机制等,这里我们来了解签名机制的使用方法

签名机制主要作用:升级App,检查权限

升级App

用户在升级一款已经安装过的App时,如果程序的修改来自于同一来源,则允许升级安装,否则会提示签名不一致无法安装的提示。

权限检查

对于申请权限的  protection level 为 signature 或者 signatureOrSystem 的,会检查权限申请者和权限声明者的证书是否是一致的。

| 生成keystore

keytool -genkey -alias mykey -keyalg RSA -validity 40000 -keystore demo.keystore
命令说明:
#    -genkey 产生密钥
#    -alias mykey 别名 mykey
#    -keyalg RSA 使用RSA算法对签名加密
#    -validity 40000 有效期限4000天
#    -keystore demo.keystore


密钥和证书管理工具命令解释如下(keytool)

 -certreq            生成证书请求

 -changealias        更改条目的别名

 -delete             删除条目

 -exportcert         导出证书

 -genkeypair         生成密钥对

 -genseckey          生成密钥

 -gencert            根据证书请求生成证书

 -importcert         导入证书或证书链

 -importpass         导入口令

 -importkeystore     从其他密钥库导入一个或所有条目

 -keypasswd          更改条目的密钥口令

 -list               列出密钥库中的条目

 -printcert          打印证书内容

 -printcertreq       打印证书请求的内容

 -printcrl           打印 CRL 文件的内容

 -storepasswd        更改密钥库的存储口令


||对apk进行签名

jarsigner -verbose -keystore demo.keystore -signedjar test_signed.apk test.apk mykey
#test_signed.apk是签名之后的文件
#test.apk是需要签名的文件

另外需要注意的是,如果你的jdk版本在1.7以上,你在对apk签名时,需要加上这个参数:

-digestalg SHA1 -sigalg MD5withRSA
否则会出现:Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]的错误。

签名工具用法:(jarsigner)

 jarsigner [选项] jar-file 别名

 jarsigner -verify [选项] jar-file [别名...]

[-keystore <url>]           密钥库位置

[-storepass <口令>]         用于密钥库完整性的口令

[-storetype <类型>]         密钥库类型

[-keypass <口令>]           私有密钥的口令 (如果不同)

[-certchain <文件>]         替代证书链文件的名称

[-sigfile <文件>]           .SF/.DSA 文件的名称

[-signedjar <文件>]         已签名的 JAR 文件的名称

[-digestalg <算法>]        摘要算法的名称

[-sigalg <算法>]           签名算法的名称

[-verify]                   验证已签名的 JAR 文件

[-verbose[:suboptions]]     签名/验证时输出详细信息。子选项可以是 all, grouped 或 summary

[-certs]                    输出详细信息和验证时显示证书

[-tsa <url>]                时间戳颁发机构的位置

[-tsacert <别名>]           时间戳颁发机构的公共密钥证书

[-tsapolicyid <oid>]        时间戳颁发机构的 TSAPolicyID

[-altsigner <类>]           替代的签名机制的类名

[-altsignerpath <路径列表>] 替代的签名机制的位置

[-internalsf]               在签名块内包含 .SF 文件

[-sectionsonly]             不计算整个清单的散列

[-protected]                密钥库具有受保护验证路径

[-providerName <名称>]      提供方名称

[-providerClass <类>        加密服务提供方的名称

  [-providerArg <参数>]]... 主类文件和构造器参数

[-strict]                   将警告视为错误

||| 查看签名信息

1、查看keystore的信息

keytool -list -keystore demo.keystore -alias mykey -v
2、查看keystore的公钥证书信息

keytool -list -keystore demo.keystore -alias mykey -rfc

(注:获取Base64格式的公钥证书,RFC 1421)

3、查看apk的签名信息

jarsigner -verify -verbose -certs <your_apk_path.apk>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值