Proceso de inscripción del certificado

Estoy buscando un procedimiento para inscribir un certificado.

He buscado mucho pero no encontré una buena respuesta. Hasta ahora lo entiendo primero tengo que generar una tienda de claves (para crear una clave pública y una privada), entonces la clave privada debe mantenerse privada y la clave pública es enviar con otra información (como nombre, organización) a la CA. Luego, CA generará algo y me devolverá, que contiene la clave pública y la información.

Hasta ahora lo entiendo, pero ¿qué CA genera? ¿Qué es el archivo P12 y qué es el archivo .cer?

¿Alguien puede ayudarme con esta pregunta? Realmente me siento impotente. Gracias por adelantado.

    El procedimiento general para emitir certificados en una Infraestructura de clave pública es más que todo lo siguiente.

    1) el cliente genera un par de claves, privado y público

    2) el cliente genera una CSR (solicitud de firma de certificado) que incluye atributos como el nombre común y la clave pública. Lo firma con la clave privada y lo envía al servidor

    3) El servidor crea el Certificado X509 con los datos de CSR, lo arruina con la clave privada de CA y devuelve el X509 al cliente

    4) el cliente almacena la clave privada y el certificado en KeyStore

    ¿Qué CA genera?

    El certificado x509

    Qué es el archivo P12

    Un archivo en formato PKCS # 12 (.pfx, .p12) que contiene un almacén de claves

    qué es el archivo .cer contiene

    La parte pública del certificado (no clave privada) en formato DER o PEM

    EDITADO – generación de CSR en Android

    Dependencias de Gradle

    compile 'com.madgag.spongycastle:core:1.51.0.0' compile 'com.madgag.spongycastle:pkix:1.51.0.0' 

    Generar KeyPair y CSR

     //Generate KeyPair KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(KEY_SIZE, new SecureRandom()); KeyPair keyPair = keyGen.generateKeyPair(); //Generate CSR in PKCS#10 format encoded in DER PKCS10CertificationRequest csr = CsrHelper.generateCSR(keyPair, commonname); byte CSRder[] = csr.getEncoded(); 

    Utilidades

     public class CsrHelper { private final static String DEFAULT_SIGNATURE_ALGORITHM = "SHA256withRSA"; private final static String CN_PATTERN = "CN=%s, O=Aralink, OU=OrgUnit"; private static class JCESigner implements ContentSigner { private static Map ALGOS = new HashMap(); static { ALGOS.put("SHA256withRSA".toLowerCase(), new AlgorithmIdentifier( new ASN1ObjectIdentifier("1.2.840.113549.1.1.11"))); ALGOS.put("SHA1withRSA".toLowerCase(), new AlgorithmIdentifier( new ASN1ObjectIdentifier("1.2.840.113549.1.1.5"))); } private String mAlgo; private Signature signature; private ByteArrayOutputStream outputStream; public JCESigner(PrivateKey privateKey, String sigAlgo) { //Utils.throwIfNull(privateKey, sigAlgo); mAlgo = sigAlgo.toLowerCase(); try { this.outputStream = new ByteArrayOutputStream(); this.signature = Signature.getInstance(sigAlgo); this.signature.initSign(privateKey); } catch (GeneralSecurityException gse) { throw new IllegalArgumentException(gse.getMessage()); } } @Override public AlgorithmIdentifier getAlgorithmIdentifier() { AlgorithmIdentifier id = ALGOS.get(mAlgo); if (id == null) { throw new IllegalArgumentException("Does not support algo: " + mAlgo); } return id; } @Override public OutputStream getOutputStream() { return outputStream; } @Override public byte[] getSignature() { try { signature.update(outputStream.toByteArray()); return signature.sign(); } catch (GeneralSecurityException gse) { gse.printStackTrace(); return null; } } } //Create the certificate signing request (CSR) from private and public keys public static PKCS10CertificationRequest generateCSR(KeyPair keyPair, String cn) throws IOException, OperatorCreationException { String principal = String.format(CN_PATTERN, cn); ContentSigner signer = new JCESigner (keyPair.getPrivate(),DEFAULT_SIGNATURE_ALGORITHM); PKCS10CertificationRequestBuilder csrBuilder = new JcaPKCS10CertificationRequestBuilder( new X500Name(principal), keyPair.getPublic()); ExtensionsGenerator extensionsGenerator = new ExtensionsGenerator(); extensionsGenerator.addExtension(Extension.basicConstraints, true, new BasicConstraints( true)); csrBuilder.addAttribute(PKCSObjectIdentifiers.pkcs_9_at_extensionRequest, extensionsGenerator.generate()); PKCS10CertificationRequest csr = csrBuilder.build(signer); return csr; } }