Android apk签名机制

作者: 奔跑吧李博 | 来源:发表于2020-08-31 14:44 被阅读0次
    什么是数字签名?

    数字签名就是为你的程序打上一种标记,来作为你自己的标识,当别人看到签名的时候会知道它是与你相关的。

    为什么要数字签名?

    系统要求的。 Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的。这个数字签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。

    那我们在平时开发中,直接运行程序没有签名怎么将apk安装上了呢?其实也是进行了签名的,是AS给apk用了默认的签名文件。

    APK程序的两种模式:调试模式(debugmode)和发布模式(release mode)

    在调试模式下,ADT会自动的使用debug密钥为应用程序签名,因此我们可以直接运行程序。

    数字证书的要点

    1.所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序 。

    2.Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证。

    3.如果要正式发布一个Android,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。

    4.数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。

    5.Android使用标准的java工具 Keytool andJarsigner 来生成数字证书,并给应用程序包签名。

    签名后的apk分析:

    对一个APK文件签名之后,APK文件根目录下会增加META-INF目录,该目录下增加三个文件:

    MANIFEST.MF
    CERT.SF
    CERT.RSA

    签名原理

    对Apk中的每个文件做一次算法(数据摘要+Base64编码),保存到MANIFEST.MF文件中。
    对MANIFEST.MF整个文件做一次算法(数据摘要+Base64编码),存放到CERT.SF文件的头属性中,在对MANIFEST.MF文件中各个属性块做一次算法(数据摘要+Base64编码),存到到一个属性块中。
    对CERT.SF文件做签名,内容存档到CERT.RSA中。

    MANIFEST.MF:

    保存了所有文件的SHA-1并base64编码后的值


    CERT.SF:

    SHA1-Digest-Manifest的值,这个值就是MANIFEST.MF文件的SHA-1并base64编码后的值。

    CERT.RSA:

    包含了公钥信息和发布机构信息。它把之前生成的 CERT.SF文件, 用私钥计算出签名, 然后将签名以及包含公钥信息的数字证书一同写入 CERT.RSA 中保存。

    相关文章

      网友评论

        本文标题:Android apk签名机制

        本文链接:https://www.haomeiwen.com/subject/vpumrktx.html