Android – преобразование строки сертификата pkcs12 в объект сертификата x509 для bks keystore

Я пишу приложение для Android, которое требует сертификации SSL для определенных веб-запросов. В отличие от параметров, которые я вижу в Интернете, о создании файлов хранилища ключей с использованием файла сертификата, я должен сделать начальный веб-запрос, который возвращает сертификат в виде строки в ответ json.

Данные JSON отформатированы следующим образом … (обратите внимание: сокращен следующий сертификат, «…» не существует в реальном ответе)

"result":{ "pkcs12": "Ulv6GtdFbjzLeqlkelqwewlq822OrEPdH+zxKUkKGX/eN...9801asds3BCfu52dm7JHzPAOqWKaEwIgymlk=" }, 

Я декодирую это значение, используя Base64.deocode, чтобы сохранить его как байт []

 ssl.setPkcs12( Base64.decode( jsonObject.optString( "pkcs12" ) ) ); 

Затем я пытаюсь создать сертификат X509 с использованием байта []

 CertificateFactory certFactory = CertificateFactory.getInstance( "X.509" ); InputStream in = new ByteArrayInputStream( ssl.getPkcs12() ); X509Certificate cert = (X509Certificate) certFactory.generateCertificate( in ); 

Мой код не работает в методе generateCertificate () с

 "java.security.cert.CertificateException: org.apache.harmony.security.asn1.ASN1Exception: ASN.1 Sequence: mandatory value is missing at [4]". 

Я потратил много времени, пытаясь исправить то, что кажется простой проблемой, и вам не повезло. Любая помощь будет потрясающей!

Если кому-то еще нужен ответ …

Я смог обойти это, полностью уничтожив библиотеки BouncyCastle и используя хранилище PKCS12 вместо BKS. Следующим фрагментом является решение. Мне больше не приходилось создавать объект сертификата, вместо этого я сохраняю строку сертификата json в настройках, затем захватываю его и использую для генерации хранилища ключей на лету. Декодер base64 не является декодером BouncyCastle, он является обычным стандартным декодером.

 KeyStore keyStore = KeyStore.getInstance( "PKCS12" ); String pkcs12 = UserSession.getCertificate( context ); InputStream sslInputStream = new ByteArrayInputStream( MyBase64Decoder.decode( pkcs12.getBytes() ) ); keyStore.load( sslInputStream, "password".toCharArray() ); 
Intereting Posts
Веб-представление Android не отображает загруженный контент Html на определенном телефоне. Htc one x Android – камера как детектор движения Как изменить изображения на ImageButton в Android при использовании OnTouchListener? Как добавить несколько видов заголовков в ListView Мой debug AndroidManifest.xml дает мне «не удается разрешить ошибки символов» Phonegap – переход из фона на передний план Как включить маркер в описание приложения Google Play? Существует ли ограничение на количество строк кода, которое вы можете поместить в eclipse java doument Как импортировать проект библиотеки в Android Studio без копирования? Отправка электронной почты с помощью GMail в Android Как сделать класс AndroidApplication от LibGDX поддержкой Android Fragments? Как повернуть растровое изображение в Android? Использует ли android dalvik vm оптимизацию анализа побега? Как получить базовый взгляд от MotionEvent? NullPointerException при входе в систему с помощью Facebook SDK и ParseFacebookUtils