Почему установленный CA не указан в доверенных учетных данных на Android - PullRequest
1 голос
/ 26 сентября 2019

Я разрабатываю приложение для Android (5.1 -> это устройство поддерживает только эту версию), которое взаимодействует с сервером, для этого я использую Retrofit.У меня есть свой ЦС, и мне нужно отправить его с запросом на сервер.
Но у меня есть две проблемы:
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();
    }

И мой сертификат отсутствуетВ этом списке тоже нет.
Есть предложения, почему это может быть?

Когда мне удастся установить сертификат, и он будет указан в приведенном выше коде, будет ли достаточно просто выполнить приведенный ниже код для проверки клиента на стороне сервера?:
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();
        }

С наилучшими пожеланиями!

...