Comment exporter une clé privée d'un keystore de certificat auto-signé

je viens de créer un certificat auto-signé sur une machine linux tournant sous tomcat 6.

j'ai créé les clés comme ceci, valables pour 10 ans:

keytool -genkey -alias tomcatorange -keyalg RSA -validity 3650

et copié le keystore dans un dossier dans tomcat, et mis à jour le serveur.xml pour pointer vers le fichier de clés.

maintenant mon administrateur réseau demande à la fois la clé publique et privée (pour notre équilibreur de charge)

je peux générer la clé publique en utilisant:

openssl s_client -connect mydomain.com:8443

Mais comment puis-je exportation/récupérer la clé privée?

20
demandé sur jeph perro 2010-04-15 00:13:02

4 réponses

C'est un peu délicat. D'abord, vous pouvez utiliser keytool pour mettre la clé privée dans le format PKCS12, qui est plus portable/compatible que les différents formats de keystore de Java. Voici un exemple qui prend une clé privée avec alias 'mykey' dans un keystore Java et la copie dans un fichier PKCS12 nommé myp12file.p12. [notez que sur la plupart des écrans de cette commande s'étend au-delà du côté droit de la boîte: vous avez besoin de faire défiler vers la droite pour tout voir]

keytool -v -importkeystore -srckeystore .keystore -srcalias mykey -destkeystore myp12file.p12 -deststoretype PKCS12
Enter destination keystore password:  
Re-enter new password: 
Enter source keystore password:  
[Storing myp12file.p12]

le fichier myp12file.p12 contient la clé privée au format PKCS12 qui peut être utilisée directement par de nombreux progiciels ou encore traitée avec openssl pkcs12 la commande. Par exemple,

openssl pkcs12 -in myp12file.p12 -nocerts -nodes
Enter Import Password:
MAC verified OK
Bag Attributes
    friendlyName: mykey
    localKeyID: 54 69 6D 65 20 31 32 37 31 32 37 38 35 37 36 32 35 37 
Key Attributes: <No Attributes>
-----BEGIN RSA PRIVATE KEY-----
MIIC...
.
.
.
-----END RSA PRIVATE KEY-----

imprime la clé privée en clair.

notez que c'est un clé privée et vous sont responsables d'apprécier les implications de sécurité de le retirer de votre Java keystore et de le déplacer.

47
répondu James K Polk 2017-10-13 19:25:11

Utiliser l'Explorateur de fichier de clés gui - http://keystore-explorer.sourceforge.net/ - permet d'extraire la clé privée à partir de un .jks en différents formats.

5
répondu user2984392 2014-03-06 14:18:29

http://anandsekar.github.io/exporting-the-private-key-from-a-jks-keystore/

public class ExportPrivateKey {
        private File keystoreFile;
        private String keyStoreType;
        private char[] password;
        private String alias;
        private File exportedFile;

        public static KeyPair getPrivateKey(KeyStore keystore, String alias, char[] password) {
                try {
                        Key key=keystore.getKey(alias,password);
                        if(key instanceof PrivateKey) {
                                Certificate cert=keystore.getCertificate(alias);
                                PublicKey publicKey=cert.getPublicKey();
                                return new KeyPair(publicKey,(PrivateKey)key);
                        }
                } catch (UnrecoverableKeyException e) {
        } catch (NoSuchAlgorithmException e) {
        } catch (KeyStoreException e) {
        }
        return null;
        }

        public void export() throws Exception{
                KeyStore keystore=KeyStore.getInstance(keyStoreType);
                BASE64Encoder encoder=new BASE64Encoder();
                keystore.load(new FileInputStream(keystoreFile),password);
                KeyPair keyPair=getPrivateKey(keystore,alias,password);
                PrivateKey privateKey=keyPair.getPrivate();
                String encoded=encoder.encode(privateKey.getEncoded());
                FileWriter fw=new FileWriter(exportedFile);
                fw.write(“—–BEGIN PRIVATE KEY—–\n“);
                fw.write(encoded);
                fw.write(“\n“);
                fw.write(“—–END PRIVATE KEY—–”);
                fw.close();
        }


        public static void main(String args[]) throws Exception{
                ExportPrivateKey export=new ExportPrivateKey();
                export.keystoreFile=new File(args[0]);
                export.keyStoreType=args[1];
                export.password=args[2].toCharArray();
                export.alias=args[3];
                export.exportedFile=new File(args[4]);
                export.export();
        }
}
2
répondu Anand Rajasekar 2014-08-20 11:15:30

public static void main (String[] args) {

try {
        String keystorePass = "20174";
        String keyPass = "rav@789";
        String alias = "TyaGi!";
        InputStream keystoreStream = new FileInputStream("D:/keyFile.jks");
        KeyStore keystore = KeyStore.getInstance("JCEKS");
        keystore.load(keystoreStream, keystorePass.toCharArray());
        Key key = keystore.getKey(alias, keyPass.toCharArray());

        byte[] bt = key.getEncoded();
        String s = new String(bt);
        System.out.println("------>"+s);      
        String str12 = Base64.encodeBase64String(bt);

        System.out.println("Fetched Key From JKS : " + str12);

    } catch (KeyStoreException | IOException | NoSuchAlgorithmException | CertificateException | UnrecoverableKeyException ex) {
        System.out.println(ex);

    }
}
-1
répondu Ravi Tyagi 2018-08-28 19:06:51