天天看點

Android簽名與認證詳細分析之二(CERT.RSA剖析)

一、Android證書的格式

Android簽名中證書的格式采用X.509标準的版本三,不過省略了一些内容。

X.509證書格式如下圖所示:

Android簽名與認證詳細分析之二(CERT.RSA剖析)

二、證書的格式示例

從Chrome浏覽器中導出一個證書,打開之後的樣子如下圖所示:

Android簽名與認證詳細分析之二(CERT.RSA剖析)

說明:由上圖可以看出,在證書中,開發者的公鑰是顯式存在的。

三、對CERT.RSA進行詳細解析

重要說明:編寫Java程式和編寫Android應用App解析Apk的CERT.RSA檔案,得到的結果是不一樣的。按道理,都是解析的同一個檔案,為什麼結果不一樣呢?經過我們分析,發現不一樣的地方是開發者公鑰,但是這是由于二者的顯示格式不同導緻的。App解析得到的檔案時十六進制顯示的,而Java解析得到的結果卻是十進制顯示的。我們利用Java的BigInteger編寫程式,将十六進制轉換為十進制,驗證了我們的猜想。

明确了上面的問題之後,對CERT.RSA 檔案進行詳細解析,得到下圖:

Android簽名與認證詳細分析之二(CERT.RSA剖析)

說明:

(1)首先,我們的通常所說的證書的簽名,是生成證書的時候CA對整個證書的所有域簽名的得到的,而不是對某一部分簽名得到的。整個簽名就是上圖中部分一的最下面的一段十六進制的内容;

(2)程式設計中的擷取到的内容實質上是就是上圖中的部分二,這是一個證書的所有内容;

(3)部分一種的公鑰等資訊就是從部分二中得來的,可以直接在部分二中找到。

(4)可以猜測,部分一中的其他資訊也是從部分二中得來,隻不過編碼方式不一樣,是以顯示不同而已。

繼續閱讀