Android —— KeyStore密鑰庫

KeyStore密鑰庫簡介

爲有效保護加密密鑰, Android特設了一套密鑰管理機制,即KeyStore密鑰庫。 KeyStore爲應用提供了生成與獲取密鑰或者證書的服務,是一個原生的後臺守護進程。所有的公鑰、私鑰、證書都會被存儲在密鑰庫中。

密鑰庫中有很多密鑰項,每條密鑰項都會對應一個別名,密鑰項中存的可能是一個非對稱密鑰對,也可能是一個祕密密鑰,如果保存的是密鑰對,那還可能保存一個證書鏈,證書鏈第一個證書包含公鑰。

證書項:只包含一個公鑰證書,是證書而不是證書鏈

密鑰庫類型

1:BKS 安卓中默認的密鑰庫類型

擴展名爲.bks,基於JCE實現,密鑰庫的BC實現版本(Bouncycastle)

2:JKS

JKS類型密鑰庫的擴展名爲 :.jks / .ks

密鑰庫的java實現版本,密鑰庫和私鑰用不同的密碼進行保護,不支持單獨密鑰 

3:JCEKS

密鑰庫的JCE實現版本,擴展名爲.jce,相對於.jks安全級別再高,採用TripleDES保護私鑰 ,支持單獨密鑰

4:PKCS12

擴展名爲.p12/.pfx,包含私鑰、公鑰及其證書,密鑰庫和私鑰用相同密碼進行保護,不支持單獨祕鑰

5:UBER

擴展名爲.ubr,密鑰庫BC更安全實現版本(Bouncycastle UBER)

密鑰庫文件保存位置/data/misc/keystore/user_0  :

手機用戶所擁有的各項證書,名稱包含應用的UID(前綴)、證書類型、證書別名(唯一性)例如:10064_CACERT_test,通過以下方法可以獲取所有證書別名

4.3以下版本中,getInstance("AndroidKeyStore");實例化密鑰庫會發生異常:

java.security.NoSuchAlgorithmException: KeyStore AndroidKeyStore implementation not found

4.3以上版本中可以正常使用getInstance("AndroidKeyStore")實例化密鑰庫

KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);
Enumeration<String> aliases = ks.aliases();
while (aliases.hasMoreElements()) {
    CommonUtils.LogUtils.e("證書:" + aliases.nextElement());
}

證書類型

1:DER

擴展名爲.cer/.crt/.rsa ,不含私鑰ASN.1 DER

2:PKCS7

.p7b :以樹狀展示證書鏈,不含私鑰

.p7r:爲CA對證書請求籤名的回覆,只能用於導入 

3:CMS

.p7c:只保存證書 

.p7m:帶信封數據的簽名 

.p7s:時間戳簽名文件

4:PEM

.pem

5:PKCS10

.p10 / .csr 

6:SPC

微軟公司特有的雙證書文件格式,經常用於代碼簽名

.pvk :用於保存私鑰 

.spc :用於保存公鑰
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章