Estrai informazioni sulla catena del certificato dal certificato X509 firmato (risposta CSR) in Android / Bouncycastle
-
12-12-2019 - |
Domanda
Sono in grado di estrarre le informazioni sulla catena del certificato da un certificato client X509 firmato CA-firmato utilizzando le lib classi Android o Bouncycastle?
Ho un client Android che riceve un certificato X509 firmato CA da un server attendibile. Voglio salvare il certificato client firmato e la mia chiave privata per un file PKCS12 (.p12). Attualmente sto facendo questo creando un oggetto KeyStore
e aggiungendo il certificato e la chiave privata. Quando aggiungo il client PrivateKey
con il metodo KeyStore.setKeyEntry()
, un Certificate[] chain
è l'ultimo argomento, che attualmente contiene solo il certificato client. impedisce che il mio certificato venga verificabile perché non ho il certificato CA nel Certificate[] chain
? e se sì, è possibile compilare una catena di certificazione con informazioni estratte dal X509Certificate
firmato? .
La maggior parte degli esempi sembra caricare la catena CA da un file PEM, BKS Trust Store o ha già accesso a un elenco di certificati.
Ecco cosa ho:
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();
.
Grazie in anticipo!
Soluzione
Il certificato CA (s) non è incluso nel certificato firmato.Devi prenderli da qualche parte (pre-installazione, download dal server attendibile, ecc.).Per quanto riguarda l'installazione della catena completa, se il verificatore ha già accesso ai certificati CA necessari, possono sempre verificare il certificato di entità finale.Come intendi usare la tua chiave e il tuo certificato?
BTW, la tua chiamata a setCertificateEntry()
crea una voce del certificato attendibile che probabilmente non è ciò che desideri con un certificato di entità finale.