문제

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()에 대한 호출은 신뢰할 수있는 인증서 항목을 생성합니다. 아마도 엔드 엔티티 인증서로 원하는 것이 아닐 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top