Extraia informações da cadeia de certificados do certificado X509 assinado (resposta CSR) no Android/BouncyCastle

StackOverflow https://stackoverflow.com//questions/12699853

Pergunta

Posso extrair informações da cadeia de certificados de um certificado de cliente X509 assinado pela CA usando bibliotecas Android ou BouncyCastle?

Tenho um cliente Android que recebe um certificado X509 assinado por uma CA de um servidor confiável.Quero salvar o certificado de cliente assinado e minha chave privada em um arquivo PKCS12 (.p12).Atualmente estou fazendo isso criando um KeyStore objeto e adicionando o certificado e a chave privada.Quando eu adiciono o cliente PrivateKey com o KeyStore.setKeyEntry() método, um Certificate[] chain é o último argumento, que atualmente contém apenas o certificado do cliente. Isso impedirá que meu certificado seja verificável porque não tenho o certificado CA no Certificate[] chain? E se sim, é possível preencher uma cadeia de certificados com informações extraídas do certificado assinado X509Certificate?

A maioria dos exemplos parece carregar a cadeia de CA de um arquivo PEM, armazenamento confiável BKS ou já ter acesso a uma lista de certificados.

Aqui está o que eu tenho:

    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();

Desde já, obrigado!

Foi útil?

Solução

Os certificados CA não estão incluídos no seu certificado assinado.Você precisa obtê-los de algum lugar (pré-instalar, baixar de um servidor confiável, etc.).Quanto a não instalar a cadeia completa, se o verificador já tiver acesso aos certificados CA necessários, ele sempre poderá verificar o certificado da sua entidade final.Como você pretende usar sua chave e certificado?

Aliás, sua ligação para setCertificateEntry() cria uma entrada de certificado confiável que provavelmente não é o que você deseja com um certificado de entidade final.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top