yet - Cómo almacenar y cargar claves utilizando la clase java.security.KeyStore
java.security.accesscontrolexception access denied (2)
Almacenando
KeyStore ks = KeyStore.getInstance("JKS");
ks.setKeyEntry("keyAlias", key, passwordForKeyCharArray, certChain);
OutputStream writeStream = new FileOutputStream(filePathToStore);
ks.store(writeStream, keystorePasswordCharArray);
writeStream.close();
Tenga en cuenta que certChain puede ser nulo, a menos que esté pasando PrivateKey
Cargando:
KeyStore ks = KeyStore.getInstance("JKS");
InputStream readStream = new FileInputStream(filePathToStore);
ks.load(readStream, keystorePasswordCharArray);
Key key = ks.getKey("keyAlias", passwordForKeyCharArray);
readStream.close();
Lee los javadocs
EDITAR:
Tenga en cuenta que si almacena una clave secreta o utiliza alguna parte del proveedor SunJCE (extensión de criptografía de Java), deberá configurar su tipo de almacén de claves en JCEKS.
KeyStore ks = KeyStore.getInstance("JCEKS");
Apreciaría si me explicas ¿Cómo puedo usar esto con mi aplicación ssl / tls (sslserversocketfactory)? Necesito darle la ruta de un certificado de CA
Después de crear las claves secretas, ¿cómo las almaceno usando los métodos de la clase de Keystore y cómo las cargo?
Tuve una situación en la que no sabía el nombre de alias clave, pero sabía que solo había una clave en el almacén de claves. Usé el siguiente código para cargar la clave (después de cargar el almacén de claves como se muestra arriba):
Enumeration<String> aliases = keyStore.aliases();
String alias = aliases.nextElement();
KeyStore.PrivateKeyEntry keyEnt = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias,
new KeyStore.PasswordProtection(keystorePass.toCharArray()));
PrivateKey privateKey = keyEnt.getPrivateKey();
He agregado una publicación en mi blog con detalles sobre cómo cargar la clave privada, la clave pública y cómo usarlas.