Добавление нескольких сертификатов SSL в Android KeyStore не работает. (Из файла ресурсов)

Я хочу добавить несколько сертификатов из файла ресурсов в Android KeyStore:

if (sslContext==null) { // loading CA from an InputStream InputStream is = AVApplication.getContext().getResources().openRawResource(R.raw.wildcard); String certificates = Converter.convertStreamToString(is); String certificateArray[] = certificates.split("-----BEGIN CERTIFICATE-----"); for (int i = 1; i < certificateArray.length; i++) { certificateArray[i] = "-----BEGIN CERTIFICATE-----" + certificateArray[i]; //LogAV.d("cert:" + certificateArray[i]); // generate input stream for certificate factory InputStream stream = IOUtils.toInputStream(certificateArray[i]); // CertificateFactory CertificateFactory cf = CertificateFactory.getInstance("X.509"); // certificate Certificate ca; try { ca = cf.generateCertificate(stream); } finally { is.close(); } // creating a KeyStore containing our trusted CAs KeyStore ks = KeyStore.getInstance("BKS"); ks.load(null, null); ks.setCertificateEntry("av-ca" + i, ca); // TrustManagerFactory String algorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(algorithm); // Create a TrustManager that trusts the CAs in our KeyStore tmf.init(ks); // Create a SSLContext with the certificate that uses tmf (TrustManager) sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, tmf.getTrustManagers(), new SecureRandom()); } } return sslContext; 

Работает только последний сертификат файла! Кажется, что сертификат перезаписывает другой.

Файл выглядит так:

 -----BEGIN CERTIFICATE----- cert -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- cert -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- cert -----END CERTIFICATE----- 

Надеюсь, кто-то может мне помочь! 🙂

Thx to @Dan Getz, теперь это работает.

Решение:

 public static SSLContext getSSLContext() throws Exception { if (sslContext==null) { // loading CA from an InputStream InputStream is = AVApplication.getContext().getResources().openRawResource(R.raw.wildcard); String certificates = Converter.convertStreamToString(is); String certificateArray[] = certificates.split("-----BEGIN CERTIFICATE-----"); // creating a KeyStore containing our trusted CAs KeyStore ks = KeyStore.getInstance("BKS"); ks.load(null, null); for (int i = 1; i < certificateArray.length; i++) { certificateArray[i] = "-----BEGIN CERTIFICATE-----" + certificateArray[i]; //LogAV.d("cert:" + certificateArray[i]); // generate input stream for certificate factory InputStream stream = IOUtils.toInputStream(certificateArray[i]); // CertificateFactory CertificateFactory cf = CertificateFactory.getInstance("X.509"); // certificate Certificate ca; try { ca = cf.generateCertificate(stream); } finally { is.close(); } ks.setCertificateEntry("av-ca" + i, ca); } // TrustManagerFactory String algorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(algorithm); // Create a TrustManager that trusts the CAs in our KeyStore tmf.init(ks); // Create a SSLContext with the certificate that uses tmf (TrustManager) sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, tmf.getTrustManagers(), new SecureRandom()); } return sslContext; } 
Intereting Posts
Только одно приложение на вкладке галактики? Проблема с заменой изображения Picasso при использовании с RecyclerView Получить профиль пользователя / владельца с помощью URI и образа пользователя с API 8 Android: создание 8-битного растрового изображения с индексированным цветом Анимация Tween на холсте в пользовательском представлении Внедрение пользовательского TextView с пользовательским textSize Панель действий не показана с помощью AppCompat Как передать пользовательские параметры компонента в java и xml Как показать диалоговое окно запроса разрешения на размещение в Google выше / через блокировку экрана? Какая минимальная версия для Android требуется для использования в текстовом приложении Как выполнить запрос по умолчанию SpeechRecognizer Как запустить приложение Android в фоновом режиме Ошибка импорта android.support.v7.widget.CardView в Eclipse INSTALL_FAILED_UPDATE_INCOMPATIBLE, но приложение не установлено Обнаружение Bluetooth-устройств Le на Android