android - 在我的 Android 设备中检测已安装的证书

标签 android certificate

我在应用程序启动时在我的应用程序中安装证书。我已经完成了以下几个链接并成功安装了证书。

我知道我们不能在没有用户交互的情况下静默安装证书。目前我不知道如何在用户每次打开我的应用程序时停止提示。

每当我的应用程序当前每次启动时,它都会要求用户安装证书。有什么方法可以以编程方式检测证书(在本例中是我的证书)是否已经安装。

我在我的应用程序中安装证书的代码 fragment

private void installCertificate()
    {
        try 
        {
            BufferedInputStream bis = new BufferedInputStream(getAssets().open(MY_CERT));
            byte[] keychain = new byte[bis.available()];
            bis.read(keychain);

            Intent installIntent = KeyChain.createInstallIntent();
            X509Certificate x509 = X509Certificate.getInstance(keychain);
            installIntent.putExtra(KeyChain.EXTRA_CERTIFICATE, x509.getEncoded());
            installIntent.putExtra(KeyChain.EXTRA_NAME, MY_CERT);
            startActivityForResult(installIntent, INSTALL_KEYCHAIN_CODE);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        catch (CertificateException e) 
        {
            e.printStackTrace();
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {
        if (requestCode == INSTALL_KEYCHAIN_CODE) 
        {
            switch (resultCode) 
            {  
                case Activity.RESULT_OK:
                    doTheTask();
                    break;
                case Activity.RESULT_CANCELED:
                    finish();
                    break;                  
                default:
                    super.onActivityResult(requestCode, resultCode, data);
            }
        }
    }

另外仅供引用,installCertificate() 是从 onCreate() 调用的。

请帮我解决同样的问题。任何帮助将不胜感激。


查询:当提示输入证书名称时,输入的文本会被选中,并且在方向更改时会出现剪切/复制选项。任何人都知道如何在出现提示时停止文本选择?!!!

最佳答案

我使用下面的 Java 代码检查我的证书是否已安装:

try
{
    KeyStore ks = KeyStore.getInstance("AndroidCAStore");
    if (ks != null) 
    {
        ks.load(null, null);
        Enumeration aliases = ks.aliases();
        while (aliases.hasMoreElements()) 
        {
            String alias = (String) aliases.nextElement();
            java.security.cert.X509Certificate cert = (java.security.cert.X509Certificate) ks.getCertificate(alias);

            if (cert.getIssuerDN().getName().contains("MyCert")) 
            {
                isCertExist = true;
                break;
            }
        }
    }
} catch (IOException e) {
    e.printStackTrace();
} catch (KeyStoreException e) {
    e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
} catch (java.security.cert.CertificateException e) {
    e.printStackTrace();
}

关于android - 在我的 Android 设备中检测已安装的证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14889309/

相关文章:

pdf - iText - 生成没有证书链的 PDF 哈希

certificate - WinHttpCertCfg 将证书安装到未知位置

android - 跳过 CSV 解析器中的每第 N 行

android - 在 Activity 被杀死之前,onDestroy() 可以花费多少时间?

php - 让 Guzzle 信任自签名证书?

Android:如何在使用相同证书签名的项目之间共享代码

java - 如何将证书从 PEM 转换为 JKS?

android - createWindowSurface 失败 : EGL_BAD_MATCH?

android - 在 init.rc 中测试属性是否未设置

java - GPS 寻找高度