java - respuesta - keytool opcion no permitida
Importe de forma programática el certificado de confianza de CA en el archivo de almacén de claves existente sin utilizar keytool (2)
Descargue certificados de los enlaces y almacénelos en una ruta específica ... luego cargue ese archivo en trustStore durante el tiempo de ejecución utilizando el siguiente código ... espero que este ejemplo le ayude ...
KeyStore keyStore = KeyStore.getInstance("JKS");
String fileName = "D://certs_path//cacerts"; // cerrtification file path
System.setProperty("javax.net.ssl.trustStore", fileName);
Me gustaría crear un programa JAVA que importe la CA.cer en el archivo de almacén de claves existente. Para que el usuario final pueda insertar el certificado CA más conveniente (sin usar CMD y clave en el comando).
¿Es en cualquier lugar que el código JAVA puede hacer esto?
Intento de alguna manera, pero todavía no consigo obtener el certificado en Java
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream certstream = fullStream (certfile);
Certificate certs = cf.generateCertificates(certstream);
El error es de tipos incompatibles, ¿hay alguna otra sugerencia?
Muchas gracias
He resuelto la pregunta. Aquí está el código.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.io.IOException;
import java.io.InputStream;
import java.io.DataInputStream;
import java.io.ByteArrayInputStream;
import java.security.spec.*;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.util.Collection;
public class ImportCA {
public static void main(String[] argv) throws Exception {
String certfile = "yourcert.cer"; /*your cert path*/
FileInputStream is = new FileInputStream("yourKeyStore.keystore");
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(is, "yourKeyStorePass".toCharArray());
String alias = "youralias";
char[] password = "yourKeyStorePass".toCharArray();
//////
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream certstream = fullStream (certfile);
Certificate certs = cf.generateCertificate(certstream);
///
File keystoreFile = new File("yourKeyStorePass.keystore");
// Load the keystore contents
FileInputStream in = new FileInputStream(keystoreFile);
keystore.load(in, password);
in.close();
// Add the certificate
keystore.setCertificateEntry(alias, certs);
// Save the new keystore contents
FileOutputStream out = new FileOutputStream(keystoreFile);
keystore.store(out, password);
out.close();
}
private static InputStream fullStream ( String fname ) throws IOException {
FileInputStream fis = new FileInputStream(fname);
DataInputStream dis = new DataInputStream(fis);
byte[] bytes = new byte[dis.available()];
dis.readFully(bytes);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
return bais;
}
}
La esperanza puede ayudar a aquellas personas que lo necesitan. Es solo un código simple que inserta el archivo .cer certificado CA en su almacén de claves sin usar keytool en CMD =)