網站首頁 編程語言 正文
一.證書在源碼中的路徑
5.1系統證書(命名是 openssl x509 -subject_hash_old -in filename)
libcore/luni/src/main/files/cacerts
7.1及以后系統證書
/system/ca-certificates/files
二.證書在固件中的路徑
/system/etc/security/cacerts
三.手動安裝流程
設置-->安全-->從SD卡安裝證書:
在AndroidManif.xml里
<Preference android:key="credentials_install" android:title="@string/credentials_install" android:summary="@string/credentials_install_summary" android:persistent="false"> <intent android:action="android.credentials.INSTALL" android:targetPackage="com.android.certinstaller" android:targetClass="com.android.certinstaller.CertInstallerMain"/> </Preference>
packages/apps/CertInstaller
CertInstallerMain打開Document,選擇證書文件,選擇好后。啟動CerInstaller
然后根據證書類型區分createPkcs12PasswordDialog和createNameCredentialDialog,看個簡單的createNameCredentialDialog
try { startActivityForResult( mCredentials.createSystemInstallIntent(), //Intent intent = new Intent("com.android.credentials.INSTALL"); REQUEST_SYSTEM_INSTALL_CODE); } catch (ActivityNotFoundException e) { Log.w(TAG, "systemInstall(): " + e); toastErrorAndFinish(R.string.cert_not_saved); }
看intent,又到了Settings的CredentialStorage
Settings/src/com/android/settings/CredentialStorage.java ? ?installIfAvailable
添加證書:Settings/src/com/android/settings/CredentialStorage.java ? ?installIfAvailable()
刪除證書:Settings/src/com/android/settings/TrustedCredentialsSettings.java ? AliasOperation#doInBackground
顯示證書:Settings/src/com/android/settings/TrustedCredentialsSettings.java ? AdapterData#AliasLoader#doInBackground ??
證書內容:Settings/src/com/android/settings/TrustedCredentialsSettings.java ?CertHolder ?SslCertificate
安裝類型兩種: userKey和Ca證書(pk12要處理密碼)
CertInstaller\src\com\android\certinstaller\CredentialHelper.java
異常碼:
機器未設置密碼鎖
機器未解鎖
鎖屏方式不符合要求還是packages/apps/CertInstaller/CertInstallerMain,startActivityForResult結果回調
if (requestCode == REQUEST_SYSTEM_INSTALL_CODE) { if (resultCode == RESULT_OK) { Log.d(TAG, "credential is added: " + mCredentials.getName()); Toast.makeText(this, getString(R.string.cert_is_added, mCredentials.getName()), Toast.LENGTH_LONG).show(); if (mCredentials.hasCaCerts()) { // more work to do, don't finish just yet new InstallCaCertsToKeyChainTask().execute(); return; } setResult(RESULT_OK); } else { Log.d(TAG, "credential not saved, err: " + resultCode); toastErrorAndFinish(R.string.cert_not_saved); } }
如果是CaCerts,還要進行 new InstallCaCertsToKeyChainTask().execute() --> mCredentials.installCaCertsToKeyChain --> keyChainService.installCaCertificate
keyChainService實現在packages/apps/KeyChain ?mTrustedCertificateStore.installCertificate
external/conscrypt/src/platform/java/org/conscrypt/TrustedCertificateStore ? installCertificate --> writeCertificate
四.c層
system/security/keystore/keystore.cpp
添加證書 ?installIfAvailable -> mKeyStore.put -> mBinder.insert (這里還是java層)
-> KeyStoreProxy::insert -> KeyStore::put ?(這里getEncryptionKey用到一個AESkey,哪里來的?)
五.為什么要鎖屏密碼
以設置密碼為例
Settings/src/com/android/settings/ChooseLockPassword.java ?mLockPatternUtils.saveLockPassword
frameworks/base/core/java/com/android/internal/widget/LockPatternUtils.java ?getLockSettings().setLockPassword
frameworks/base/services/core/java/com/android/server/LockSettingsService.java ?setLockPassword -> maybeUpdateKeystore ?-> ks.passwordUid
-> 到keystore.cpp的password_uid?
password_uid 有三種狀態,其中STATE_UNINITIALIZED和STATE_LOCKED都會調用setupMasterKeys,經鎖屏密碼設置AESkey
這里就解答了添加證書時的AESKey是哪來的
這個是基于Android5.1分析的,高版本可能文件名不同,但是知道大概位置,搜索下,應該沒什么難度? ? ? ??
原文鏈接:https://blog.csdn.net/z9722/article/details/121752677
相關推薦
- 2023-06-19 C語言如何實現BOOL類型_C 語言
- 2022-04-05 報錯:Can‘t locate Debian/Debhelper/Dh_Lib.pm in @INC
- 2022-03-30 用C語言畫一個圓_C 語言
- 2023-02-10 docker容器間互相訪問(docker?bridge網絡)_docker
- 2022-03-12 Android導航欄功能項的顯示與屏蔽介紹_Android
- 2023-04-08 Swift中的HTTP模擬測試示例詳解_Swift
- 2022-03-14 -bash: 未預期的符號 `(‘ 附近有語法錯誤的解決辦法
- 2022-12-24 詳解Python裝飾器的四種定義形式_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支