web-dev-qa-db-fra.com

Comment exporter une clé privée à partir d'un magasin de clés de certificat auto-signé

Je viens de créer un certificat auto-signé sur une boîte Linux exécutant Tomcat 6.

J'ai créé les clés comme ça, valables 10 ans:

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

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

Mon administrateur réseau demande maintenant 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 exporter/récupérer la clé privée?

22
jeph perro

C'est un peu délicat. Vous pouvez d'abord utiliser keytool pour mettre la clé privée au format PKCS12, qui est plus portable/compatible que les différents formats de magasin de clés de Java. Voici un exemple prenant une clé privée avec l'alias 'mykey' dans un magasin de clés Java et la copiant dans un fichier PKCS12 nommé myp12file.p12. [notez que sur la plupart des écrans, cette commande s'étend au-delà du côté droit de la boîte: vous devez 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]

Maintenant, le fichier myp12file.p12 contient la clé privée au format PKCS12 qui peut être utilisée directement par de nombreux logiciels ou encore traitée à l'aide de openssl pkcs12 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 non chiffrée.

Notez qu'il s'agit d'une clé privée , et vous êtes responsable de l'appréciation les implications pour la sécurité de le supprimer de votre magasin de clés Java et de le déplacer).

51
James K Polk

Utilisez Keystore Explorer gui - http://keystore-Explorer.sourceforge.net/ - vous permet d'extraire la clé privée d'un fichier .jks dans différents formats.

6
user2984392

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
Anand Rajasekar