android ca,Android CA证书安装流程
前段时间一直在忙高通项目的需求,同事转给我一个证书安装的bug给我,一直没时间解,给Marvell提case,个把月了还不给回复,囧!求人不如求己正好最近需求做完了,索性就自己跟下代码。
证书安装入口在设置-->安全里,相应代码如下:
android:title="@string/credentials_install"
android:summary="@string/credentials_install_summary"
android:persistent="false">
android:targetPackage="com.android.certinstaller"
android:targetClass="com.android.certinstaller.CertInstallerMain"/>
当我们点击“从存储设备安装证书”时,就会通过intent进入CertInstallerMain。在onCreate里对相应action做处理
if (Credentials.INSTALL_ACTION.equals(action)
|| Credentials.INSTALL_AS_USER_ACTION.equals(action)) {
Bundle bundle = intent.getExtras();//这里获取的bundle为空。
由于bundle未空会执行如下代码:
if (bundle == null
|| bundle.isEmpty()
|| (bundle.size() == 1
&& (bundle.containsKey(KeyChain.EXTRA_NAME)
|| bundle.containsKey(Credentials.EXTRA_INSTALL_AS_UID)))) {
final Intent openIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
openIntent.setType("*/*");
openIntent.putExtra(Intent.EXTRA_MIME_TYPES, ACCEPT_MIME_TYPES);
openIntent.putExtra(DocumentsContract.EXTRA_SHOW_ADVANCED, true);
startActivityForResult(openIntent, REQUEST_OPEN_DOCUMENT);
这里就会弹出一个类似文件管理的界面,选择相应的证书后会自动安装证书。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_OPEN_DOCUMENT) {
if (resultCode == RESULT_OK) {
startInstallActivity(null, data.getData());
} else {
finish();
}
} else if (requestCode == REQUEST_INSTALL) {
setResult(resultCode);
finish();
} else {
Log.w(TAG, "unknown request code: " + requestCode);
}
}
private void startInstallActivity(String mimeType, byte[] value) {
Intent intent = new Intent(this, CertInstaller.class);
if ("application/x-pkcs12".equals(mimeType)) {
intent.putExtra(KeyChain.EXTRA_PKCS12, value);
} else if ("application/x-x509-ca-cert".equals(mimeType)
|| "application/x-x509-user-cert".equals(mimeType)
|| "application/x-x509-server-cert".equals(mimeType)
|| "application/x-pem-file".equals(mimeType)
|| "application/pkix-cert".equals(mimeType)) {
intent.putExtra(KeyChain.EXTRA_CERTIFICATE, value);
} else {
throw new IllegalArgumentException("Unknown MIME type: " + mimeType);
}
startActivityForResult(intent, REQUEST_INSTALL);
}
进入CertInstaller后,如果没有设置设置锁屏会先提示设置锁屏
protected void onCreate(Bundle savedStates) {
super.onCreate(savedStates);
mCredentials = createCredentialHelper(getIntent());
mState = (savedStates == null) ? STATE_INIT : STATE_RUNNING;
if (mState == STATE_INIT) {
if (!mCredentials.containsAnyRawData()) {
toastErrorAndFinish(R.string.no_cert_to_saved);
finish();
} else if (mCredentials.hasPkcs12KeyStore()) {
showDialog(PKCS12_PASSWORD_DIALOG);
} else {
MyAction action = new InstallOthersAction();
if (needsKeyStoreAccess()) {
sendUnlockKeyStoreIntent();
mNextAction = action;
} else {
action.run(this);
}
}
设置完成后在进行证书安装
protected void onResume() {
super.onResume();
if (mState == STATE_INIT) {
mState = STATE_RUNNING;
} else {
if (mNextAction != null) {
mNextAction.run(this);
}
}
}
最终会调用installOthers()方法
if (mCredentials.hasKeyPair()) { saveKeyPair(); finish(); } else { X509Certificate cert = mCredentials.getUserCertificate(); if (cert != null) { // find matched private key /* modify by yangzhiming 20150803 for bug 60294 start */ String key = null; try{ key = Util.toMd5(cert.getPublicKey().getEncoded()); }catch (RuntimeException ex) { toastErrorAndFinish(R.string.invalid_cert); return; } /* modify by yangzhiming 20150803 for bug 60294 end */ Map map = getPkeyMap(); byte[] privatekey = map.get(key); if (privatekey != null) { Log.d(TAG, "found matched key: " + privatekey); map.remove(key); savePkeyMap(map); mCredentials.setPrivateKey(privatekey); } else { Log.d(TAG, "didn't find matched private key: " + key); } } nameCredential(); } CA证书安装的大致流程就是这样了。
android ca,Android CA证书安装流程相关推荐
- Android 证书安装流程分析
一.证书在源码中的路径 5.1系统证书(命名是 openssl x509 -subject_hash_old -in filename) libcore/luni/src/main/files/cac ...
- android ca证书的安装,如何在Android上以编程方式安装CA证书,无需用户交互
我试图安装证书而不提示用户.我知道这不是很好的做法,但这就是PM想要的. 使用KeyChain.createInstallIntent(),我可以让Android通过调用startActivity启动 ...
- Android——自建CA证书,实现https请求
Android 使用https 协议请求客户端 server端操作 自己创建 CA 证书 拿自建CA 证书创建 server 端证书 创建 https 服务 Android客户端操作 创建项目并引入相 ...
- android安装过程图片,Android的数字证书安装过程概述
当你点击Wi-Fi Settings, Advanced界面的"安装证书":或者在Settings的Security界面下的CredentialStorage界面点击"安 ...
- android 监听本机网络请求_fiddler如何抓取https请求实现fiddler手机抓包-证书安装失败100%解决...
一.HTTP协议和HTTPS协议. (1) HTTPS协议=HTTP协议+SSL协议,默认端口:443 (2) HTTP协议(HyperText Transfer Protocol):超文本传输协议. ...
- Tomcat双向SSL认证及CA数字证书安装和配置QQ即时通信协议窥探
1.Java加密与解密的艺术 网络信息安全近几年成为热点.职业发展新方向,常规Web应用如BBS.BLOG.SNS及电子商务等B/S系统是以用户为核心,账号管理是这些系统中唯一的安全屏障:IM即时聊天 ...
- 【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )
文章目录 一.APK 文件结构 二.APK 打包流程 三.APK 安装流程 四.安卓虚拟机 一.APK 文件结构 Android 应用的安装包时 以 " .apk " 为后缀的 A ...
- Android 安装apk流程,Android PMS(二)-Apk安装流程
原创内容,转载请注明出处,多谢配合. 一.APK组成 在APK的安装流程,在此之前先简单了解下APK组成: 目录/文件 描述 assert 存放的原生资源文件,通过AssetManager类访问. l ...
- Android中APK安装流程解析
前言:大家都知道,手机关机以后,就是一个冰冷的砖头,只能用来做防身的利器,但是开机后,点击桌面上的任何一个图片,都能开启一个APP,这说明在开机过程中,系统把已经安装好的APP加载到内存中,这到底是怎 ...
- CA、根证书、数字证书、数字证书颁发的流程
数字证书原理(〇)认识SSL SSL数字证书(一)CA.根证书与数字证书 SSL数字证书(二)使用makecert.exe签发证书 SSL数字证书(三)使用 openssl 生成证书 网络安全无疑是现 ...
最新文章
- epoll监听文件_怎么理解把标准输入以ET模式加入epoll,监听EPOLLOUT事件时,epoll_wait多次返回?...
- mysql中使用join exists in时该注意的问题
- 【数论想法题】小C的问题 @科林明伦杯哈尔滨理工大学第八届程序设计竞赛...
- cookie和session、web服务工作原理、Apache配置php扩展、php简介
- python 文件服务器
- linux 实验指导书,linux操作系统实验指导书新 - 图文
- springboot 修改页面不重启
- arcgispython空间插值_python2 使用arcpy自定义GIS工具箱,实现excel读取、空间插值
- 漫画戏说:如何破解MD5加密算法
- NFT头像屡拍天价,如何从理性角度分析其市场价值?
- HDU 6411 带劲的and和
- 第七章第三十一题(合并两个有序列表)(Merge two ordered tables)
- 【算法】时间和空间复杂度
- 五脏有问题,该怎么调理?
- [html5]离线存储
- 上班族适合的兼职副业,副业做什么比较靠谱,副业赚钱的路子有哪些
- bandicam屏幕录制
- qml 实现按钮样式( 带个小三角)
- 用友ERP U8软件安装
- 【雷达通信】回波数据处理(Matlab代码实现)