Piszę aplikację dla systemu Android, która wymaga certyfikatu SSL dla niektórych żądań internetowych. W przeciwieństwie do opcji, które widzę w trybie online, dotyczących tworzenia plików magazynu kluczy przy użyciu pliku cert, muszę wykonać wstępne żądanie WWW, które zwraca certyfikat jako ciąg znaków w odpowiedzi json.Android - konwersja łańcucha certyfikatów pkcs12 na obiekt certyfikatu x509 dla magazynu kluczy bks
dane JSON jest sformatowany jak następujących ... (Uwaga: po zaświadczenie ulega skróceniu, w „...” nie istnieje w rzeczywistej odpowiedzi)
"result":{
"pkcs12": "Ulv6GtdFbjzLeqlkelqwewlq822OrEPdH+zxKUkKGX/eN...9801asds3BCfu52dm7JHzPAOqWKaEwIgymlk="
},
ja dekodowania tej wartości stosując Base64.deocode aby zapisać go jako byte []
ssl.setPkcs12(Base64.decode(jsonObject.optString("pkcs12")));
Wtedy staram się stworzyć X509Certificate pomocą byte []
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
InputStream in = new ByteArrayInputStream(ssl.getPkcs12());
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(in);
Mój kod nie udaje się na metodzie generateCertificate() z
"java.security.cert.CertificateException: org.apache.harmony.security.asn1.ASN1Exception: ASN.1 Sequence: mandatory value is missing at [4]".
Spędziłem dużo czasu próbując ustalić, co wydaje się być prosty problem bez powodzenia w ogóle. Każda pomoc byłaby niesamowita!
Czy można tutaj wkleić odpowiedź JSON zawierającą certyfikat? – emboss
"Wynik": { "pkcs12": "Ulv6GtdFbjzLeqlkelqwewlq822OrEPdH + zxKUkKGX/eN ... 9801asds3BCfu52dm7JHzPAOqWKaEwIgymlk =" }, – calebisstupid