web-dev-qa-db-fra.com

Importer par programme le certificat de confiance CA dans le fichier de clés existant sans utiliser keytool

Je voudrais créer un programme Java qui importe l’autorité de certification .cer dans le fichier de clés existant. Pour que l’utilisateur final puisse insérer le certificat CA plus facilement (sans utiliser CMD et saisir la commande ).

Est-ce là où que Java peut le faire?

j'essaie d'une certaine manière, mais je n'arrive toujours pas à obtenir le certificat en Java

CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream certstream = fullStream (certfile);
Certificate certs = cf.generateCertificates(certstream);

l'erreur est de types incompatibles, y a-t-il une autre suggestion?

Merci beaucoup

27
user2767117

Le code suivant insère le fichier de certificat CA yourcert.cer dans votre magasin de clés sans utiliser keytool:

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;
    }
}
35
user2767117

Téléchargez des certificats à partir de liens et stockez-les dans un chemin spécifique .. puis chargez ce fichier dans trustStore pendant l'exécution en utilisant le code ci-dessous .. j'espère que cet exemple vous aidera ..

KeyStore keyStore = KeyStore.getInstance("JKS");
String fileName = "D:\\certs_path\\cacerts"; // cerrtification file path
System.setProperty("javax.net.ssl.trustStore", fileName);
6
Karthikeyan Sukkoor