【问题标题】:Can I have access to Trusted Certificate Entries in Android from my App我可以从我的应用程序访问 Android 中的受信任证书条目吗
【发布时间】:2016-06-27 16:33:52
【问题描述】:

我有这种情况,我的应用程序需要向安全服务器发出请求(非 http(s),实际上它是关于 SIP 协议,但问题应该适用于任何非 http(s) 协议),我需要能够根据我的 Android 设备密钥库中安装的系统默认受信任证书来判断服务器是否被认为是受信任的。

问题是,在检查了 Android 为证书提供的所有 API(如 KeyStore、KeyChain 等)后,我还没有找到解决方案。

似乎每个应用程序,即使它可以访问设备的系统默认密钥库,它也只能访问它自己的资源,而不是全局资源,即使我们谈论的是 TrustedCertificateEntry 类型的条目。

这里有什么我遗漏的吗?

似乎是一个非常有效的非 https 身份验证用例

最好的问候, 安东尼

【问题讨论】:

    标签: android ssl certificate restcomm


    【解决方案1】:

    最后,设法找到了一种方法来做到这一点,所以让我分享一下,以防这对其他人有用。事实证明,Android 可以访问系统范围内的受信任证书。这里的细节(以及以前对我不起作用的原因)是我使用的密钥库“类型”标识符:

    KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
    

    我认为这是试图找到实际的密钥,当然不应该共享。所以经过一番挖掘,我发现有一个单独的类型,AndroidCAStore,它对我有用。所以这是一个工作代码摘录,它只是打印出证书:

    try {
      KeyStore ks = KeyStore.getInstance("AndroidCAStore");
      ks.load(null);
    
      try {
        Enumeration<String> aliases = ks.aliases();
        while (aliases.hasMoreElements()) {
          Certificate cert = ks.getCertificate(aliases.nextElement());
          Log.e(TAG, "Certificate: " + cert.toString());
        }
      }
      catch(Exception e) {
        e.printStackTrace();
      }
    }
    catch (IOException|NoSuchAlgorithmException|KeyStoreException|CertificateException e) {
      e.printStackTrace();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 2011-08-18
      • 2012-07-05
      • 2016-07-24
      • 2020-11-06
      • 2015-03-19
      相关资源
      最近更新 更多