2011-10-17 10 views
5

Bazı web istekleri için SSL sertifikası gerektiren bir android uygulaması yazıyorum. Sertifika dosyalarını cert dosyasını kullanarak çevrimiçi olarak gördüğüm seçeneklerden farklı olarak, sertifikayı json yanıtında bir dize olarak döndüren bir ilk web isteği yapmalıyım.Android - pkcs12 sertifika dize için x610 sertifika nesnesini dönüştürme bks keystore için

JSON verileri aşağıdaki gibi ... biçimlendirilir (not: Aşağıdaki sertifika "..." gerçek bir yanıt yok, kısaltılır) Bu değeri çözmesi am

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

Base64.deocode kullanarak bir byte olarak kaydetmek için [] Sonra

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

Ben bayt kullanarak bir X509Certificate oluşturmaya çalışıyorum []

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

Kodum ben hiç şans ile basit bir sorun gibi görünen düzeltmek için çalışırken zaman büyük bir geçirdim

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

ile generateCertificate() yöntemine başarısız oluyor. Herhangi bir yardım Muhteşem olacak! Başkasının cevabını ihtiyacı durumunda

+0

Sertifikayı içeren JSON yanıtını buraya yapıştırabilir misiniz? – emboss

+0

"sonuç": { "pkcs12": "Ulv6GtdFbjzLeqlkelqwewlq822OrEPdH + zxKUkKGX/eN ... 9801asds3BCfu52dm7JHzPAOqWKaEwIgymlk =" }, – calebisstupid

cevap

8

...

Tamamen BouncyCastle kütüphaneleri çıkarmak ve yerine BKS bir PKCS12 deposu kullanarak bu geçici bir çözüm başardı. Aşağıdaki parçacık çözümdür. Artık bir sertifika nesnesi oluşturmam gerekiyordu, bunun yerine json sertifika dizesini tercihlere kaydediyorum, daha sonra onu alıp bir anahtar deposu üretmek için kullanıyorum. Base64 kod çözücü BouncyCastle kod çözücü değil, özel bir standart kod çözücüdür.

KeyStore keyStore = KeyStore.getInstance("PKCS12"); 
String pkcs12 = UserSession.getCertificate(context); 
InputStream sslInputStream = new ByteArrayInputStream(MyBase64Decoder.decode(pkcs12.getBytes())); 
keyStore.load(sslInputStream, "password".toCharArray()); 
İlgili konular