我正在尝试安装证书而不提示用户。我知道这不是一个好的做法,但这就是总理想要的。
Using KeyChain.createInstallIntent() http://developer.android.com/reference/android/security/KeyChain.html#createInstallIntent%28%29,我可以通过调用让 Android 启动证书安装对话框startActivity
。然而,当我将意图传递给sendBroadcast
, 什么都没发生。也许出于安全原因该平台不支持此功能?
String CERT_FILE = Environment.getExternalStorageDirectory() + "/test/IAT.crt";
Intent intent = KeyChain.createInstallIntent();
try {
FileInputStream certIs = new FileInputStream(CERT_FILE);
byte [] cert = new byte[(int)certFile.length()];
certIs.read(cert);
X509Certificate x509 = X509Certificate.getInstance(cert);
intent.putExtra(KeyChain.EXTRA_CERTIFICATE, x509.getEncoded());
intent.putExtra(KeyChain.EXTRA_NAME, "IAT Cert");
EapActivity.this.startActivityForResult(intent, 0); // this works but shows UI
EapActivity.this.sendBroadcast(intent); // this doesn't install cert
} catch (IOException e) {
如果您具有系统权限,则只能静默安装证书。显示确认对话框是故意的,因为信任证书可能会产生严重后果 - Android 可以很高兴地打开网络钓鱼网站而不发出警告等。也就是说,ICS/JB 中的对话框非常糟糕 - 它没有告诉你什么您正在安装的证书以及颁发者,只是它是 CA 证书,这是显而易见的。
所以,要么使用公共KeyChain
API及使用startActivity()
获取确认对话框,或在将设备交给用户之前预先配置设备。
更新:在Android 4.4中,DevicePolicyManager
有一个隐藏的API(installCaCert
),允许您静默安装证书。你需要MANAGE_CA_CERTIFICATES
许可,即signature|system
,所以对于用户安装的应用程序仍然不可行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)