Extraiga información de la cadena de certificados del certificado X509 firmado (respuesta CSR) en Android/BouncyCastle
-
12-12-2019 - |
Pregunta
¿Puedo extraer información de la cadena de certificados de un certificado de cliente X509 firmado por una CA utilizando las bibliotecas de Android o BouncyCastle?
Tengo un cliente de Android que recibe un certificado X509 firmado por una CA de un servidor confiable.Quiero guardar el certificado de cliente firmado y mi clave privada en un archivo PKCS12 (.p12).Actualmente estoy haciendo esto creando un KeyStore
objeto y agregando el certificado y la clave privada.Cuando agrego el cliente PrivateKey
con el KeyStore.setKeyEntry()
método, un Certificate[] chain
es el último argumento, que actualmente solo contiene el certificado del cliente. ¿Esto impedirá que mi certificado sea verificable porque no tengo el certificado de CA en el Certificate[] chain
? Y en caso afirmativo, ¿es posible completar una cadena de certificados con información extraída del certificado firmado? X509Certificate
?
La mayoría de los ejemplos parecen cargar la cadena de CA desde un archivo PEM, un almacén de confianza BKS o ya tienen acceso a una lista de certificados.
Esto es lo que tengo:
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();
¡Gracias de antemano!
Solución
Los certificados de CA no están incluidos en su certificado firmado.Tienes que obtenerlos de algún lugar (preinstalar, descargar desde un servidor confiable, etc.).En cuanto a no instalar la cadena completa, si el verificador ya tiene acceso a los certificados de CA necesarios, siempre podrá verificar su certificado de entidad final.¿Cómo piensa utilizar su clave y certificado?
Por cierto, tu llamada a setCertificateEntry()
crea una entrada de certificado confiable que probablemente no sea lo que desea con un certificado de entidad final.