Android签名与认证详细分析之二(CERT.RSA剖析)-阿里云开发者社区

开发者社区> 开发与运维> 正文

Android签名与认证详细分析之二(CERT.RSA剖析)

简介:

一、Android证书的格式

Android签名中证书的格式采用X.509标准的版本三,不过省略了一些内容。

X.509证书格式如下图所示:

二、证书的格式示例

从Chrome浏览器中导出一个证书,打开之后的样子如下图所示:

说明:由上图可以看出,在证书中,开发者的公钥是显式存在的。

三、对CERT.RSA进行详细解析

重要说明:编写Java程序和编写Android应用App解析Apk的CERT.RSA文件,得到的结果是不一样的。按道理,都是解析的同一个文件,为什么结果不一样呢?经过我们分析,发现不一样的地方是开发者公钥,但是这是由于二者的显示格式不同导致的。App解析得到的文件时十六进制显示的,而Java解析得到的结果却是十进制显示的。我们利用Java的BigInteger编写程序,将十六进制转换为十进制,验证了我们的猜想。

明确了上面的问题之后,对CERT.RSA 文件进行详细解析,得到下图:

说明:

(1)首先,我们的通常所说的证书的签名,是生成证书的时候CA对整个证书的所有域签名的得到的,而不是对某一部分签名得到的。整个签名就是上图中部分一的最下面的一段十六进制的内容;

(2)编程中的获取到的内容实质上是就是上图中的部分二,这是一个证书的所有内容;

(3)部分一种的公钥等信息就是从部分二中得来的,可以直接在部分二中找到。

(4)可以猜测,部分一中的其他信息也是从部分二中得来,只不过编码方式不一样,所以显示不同而已。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章