首页 > 解决方案 > 为什么安装的 CA 未列在 Android 上的受信任凭据中

问题描述

我正在开发一个与服务器通信的 Android 应用程序(5.1 -> 此设备仅支持此版本),为此我使用 Retrofit。我有我的 CA,我需要将它与我的请求一起发送到服务器。
但我有两个问题:
1. 我把我的 cert.p12 放到我设备上的下载文件夹中。然后我安装了它:安全性->从 SD 卡安装。我收到了 CA 已安装的消息,但它未列在受信任的凭据 -> USER 中。
我使用此代码列出应用程序中所有已安装的 CA:

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);
                Log.e(TAG, cert.getIssuerDN().getName());
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (KeyStoreException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (java.security.cert.CertificateException e) {
        e.printStackTrace();
    }

我的证书也不在那个名单上。
任何建议为什么会这样?

  1. 当我设法安装证书并且它将按上面的代码列出时,只需执行下面的代码来验证服务器端的客户端就足够了吗?:
try {

            String keyStoreType = KeyStore.getDefaultType();
            KeyStore keyStore = KeyStore.getInstance(keyStoreType);
            if(keyStore != null){
                keyStore.load(null, null);    
                String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
                TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
                tmf.init(keyStore); 
                sslContext = SSLContext.getInstance("TLS");
                sslContext.init(null, tmf.getTrustManagers(), null);

                client = new OkHttpClient.Builder()
                    .sslSocketFactory(sslContext.getSocketFactory())
                    .build();           
            }

        } catch (KeyStoreException | CertificateException | NoSuchAlgorithmException | IOException | KeyManagementException e) {
            e.printStackTrace();
        }

此致!

标签: androidssl-certificateretrofit2

解决方案


推荐阅读