Tôi đang viết một ứng dụng Android yêu cầu chứng nhận SSL cho các yêu cầu web nhất định. Không giống như các tùy chọn tôi thấy trực tuyến về việc tạo tệp kho khóa bằng tệp cert, tôi phải thực hiện yêu cầu web ban đầu trả về chứng chỉ dưới dạng chuỗi trong câu trả lời json.Android - chuyển đổi chuỗi chứng chỉ pkcs12 thành đối tượng chứng nhận x509 cho bks keystore
Các dữ liệu JSON được định dạng như sau ... (lưu ý: Giấy chứng nhận sau đây được rút ngắn, các "..." không tồn tại trong một phản ứng thực tế)
"result":{
"pkcs12": "Ulv6GtdFbjzLeqlkelqwewlq822OrEPdH+zxKUkKGX/eN...9801asds3BCfu52dm7JHzPAOqWKaEwIgymlk="
},
Tôi giải mã giá trị này sử dụng Base64.deocode để lưu nó như là một byte []
ssl.setPkcs12(Base64.decode(jsonObject.optString("pkcs12")));
Sau đó, tôi đang cố gắng để tạo ra một X509Certificate sử dụng byte []
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
InputStream in = new ByteArrayInputStream(ssl.getPkcs12());
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(in);
Mã của tôi là không vào phương pháp generateCertificate() với
"java.security.cert.CertificateException: org.apache.harmony.security.asn1.ASN1Exception: ASN.1 Sequence: mandatory value is missing at [4]".
Tôi đã dành rất nhiều thời gian để sửa chữa những gì dường như là một vấn đề đơn giản không có may mắn chút nào. Bất kỳ trợ giúp sẽ là tuyệt vời!
Bạn có thể dán phản hồi JSON có chứa chứng chỉ ở đây không? – emboss
"kết quả": { "pkcs12": "Ulv6GtdFbjzLeqlkelqwewlq822OrEPdH + zxKUkKGX/eN ... 9801asds3BCfu52dm7JHzPAOqWKaEwIgymlk =" }, – calebisstupid