Recientemente me han encargado de simular un producto de Apple (Utilidad de configuración de iPhone) en Java. Una de las secciones en las que he estado estancado es parte de Exchange ActiveSync. Allí, le permite seleccionar un certificado de su Llavero para usar como credenciales para su cuenta EAS. Después de algunas investigaciones, descubrí que en realidad está creando un almacén de claves PKCS12, insertando la clave privada del certificado que seleccioné y codificándola en XML. Hasta ahora no es gran cosa. Si creo un archivo .p12 con Keychain Access, se carga sin problemas. Pero me encuentro con un problema cuando trato de llevar eso a Java.PKCS12 Java Keystore de CA y certificado de usuario en java
Digamos que exporto uno de esos certs que había usado anteriormente con el archivo .p12 como archivo .cer (esto es lo que esperamos obtener en el entorno). Ahora, cuando subo en Java consigo un objeto Certificado de la siguiente manera ...
KeyStore ks = java.security.KeyStore.getInstance("PKCS12");
ks.load(null, "somePassword".toCharArray());
CertificateFactory cf = CertificateFactory.getInstance("X.509", new BouncyCastleProvider());
java.security.cert.Certificate userCert = cf.generateCertificate(new FileInputStream("/Users/me/Desktop/RecentlyExportedCert.cer"));
Pero cuando intento ...
ks.setCertificateEntry("SomeAlias", userCert);
consigo la excepción ...
java.security.KeyStoreException: TrustedCertEntry not supported
Por lo tanto, desde los certs me muevo hacia las teclas. Pero con esos certificados (también obtuve el certificado de CA), solo puedo acceder a la clave pública, no a la privada. Y si intento agregar la clave pública como tal ...
java.security.cert.Certificate[] chain = {CACert};
ks.setKeyEntry("SomeAlias", userCert.getPublicKey().getEncoded(), chain);
consigo ...
java.security.KeyStoreException: Private key is not stored as PKCS#8 EncryptedPrivateKeyInfo: java.io.IOException: DerValue.getOctetString, not an Octet String: 3
Así que ahora estoy aquí. ¿Alguien tiene alguna idea de cómo obtener una clave privada de un archivo .cer en un almacén de claves PKCS12 en Java? ¿Estoy incluso en el camino correcto?
¡Gracias de antemano!
+1, muy concienzudos! –
Spot on. Gracias por la info! – Staros