서명 된 X509 인증서 (CSR 응답)에서 인증서 체인 정보 추출 Android / Bouncycastle
-
12-12-2019 - |
문제
Android 또는 Bouncycastle libs를 사용하여 CA 서명 된 X509 클라이언트 인증서에서 인증서 체인 정보를 추출 할 수 있습니까?
Trusted Server에서 CA 서명 X509 인증서를받는 Android 클라이언트가 있습니다. 서명 된 클라이언트 인증서와 개인 키를 PKCS12 (.p12) 파일에 저장하고 싶습니다. 현재 KeyStore
개체를 만들고 인증서 및 개인 키를 추가 하여이 작업을 수행하고 있습니다. PrivateKey
메소드가있는 클라이언트 KeyStore.setKeyEntry()
를 추가하면 Certificate[] chain
는 현재 클라이언트 인증서에만 포함하는 마지막 인수입니다. 은 Certificate[] chain
에서 CA 인증서가 없기 때문에 인증서가 확인되지 않도록 내 인증서가 검증되지 않고 예를 들어 서명 된 X509Certificate
에서 추출한 정보가있는 인증서 체인을 채우는 것이 가능합니까?
대부분의 예제는 PEM 파일, BKS 트러스트 스토어에서 CA 체인을로드하거나 이미 인증서 목록에 액세스 할 수있는 것으로 보입니다.
여기있는 것이 있습니다 :
X509Certificate cert; // signed client cert
PrivateKey pkey; // client private key
String password;
KeyStore store;
store = KeyStore.getInstance("PKCS12", "BC");
store.load(null, null);
// adding the signed cert
store.setCertificateEntry("Client certificate", cert);
// creating the cert chain
X509Certificate[] chain = new X509Certificate[1];
chain[0] = cert;
// add rest of the certs in the chain here
// adding the private key
store.setKeyEntry("Client private key", pkey, password.toCharArray(), chain);
FileOutputStream fos;
fos = openFileOutput("clientCredentials.p12", Context.MODE_PRIVATE);
store.store(fos, password.toCharArray());
fos.flush();
fos.close();
.
미리 감사드립니다!
해결책
CA 인증서는 서명 된 인증서에 포함되어 있지 않습니다.어딘가에서 (사전 설치, 신뢰할 수있는 서버에서 다운로드 등)에서 가져와야합니다.전체 체인을 설치하지 않으려면 검증자가 필요한 CA 인증서에 이미 액세스 할 수있는 경우 항상 엔드 엔티티 인증서를 확인할 수 있습니다.키와 인증서를 사용하려면 어떻게합니까?
btw, setCertificateEntry()
에 대한 호출은 신뢰할 수있는 인증서 항목을 생성합니다. 아마도 엔드 엔티티 인증서로 원하는 것이 아닐 수도 있습니다.