Je veux que keytool importe un fichier p12 dans cacert (magasin de clés Java). L'exécution manuelle de l'importation à partir de la ligne de commande en fonctionnement réel prend du temps et n'est pas réaliste, je voudrais donc l'inclure en tant que processus de l'application Web en cours d'exécution.
Puisqu'il a été défini de sorte que seul l'administrateur puisse réécrire les cacerts, l'utilisateur qui exécute l'application Web a également l'autorisation. (Le certificat n'a pas pu être importé à moins que l'invite de commande n'ait été exécutée avec des privilèges d'administrateur.)
sample1.java
String JRE_PATH = "C:\\Program Files\\Java\\jre1.8.0_144";
String KEYSTORE_PATH = JRE_PATH + "\\lib\\security\\cacerts"; //chemin de cacerts
String CERTFILE_PATH = "cert.p12"; //chemin du fichier p12
String ALIAS = "test"; //alias
String KEYSTORE_PASS = "changeit"; //Mot de passe du fichier de clés
String PRIVATEKEY_PASS = "root"; //Mot de passe du certificat
//Commande pour importer le certificat
ProcessBuilder importCertPb = new ProcessBuilder( "keytool", "-importkeystore", "-keystore",
"\"" + KEYSTORE_PATH + "\"", "-srckeystore",
CERTFILE_PATH, "-srcstoretype", "PKCS12", "-srcstorepass", PRIVATEKEY_PASS, "-deststorepass",
KEYSTORE_PASS );
//Puisqu'il est importé avec l'alias "1", donnez-lui un alias
// XXXX:Alias (comme un nom qui identifie de manière unique le certificat)
ProcessBuilder changeAliasPb = new ProcessBuilder( "keytool", "-changealias", "-alias", "1", "-destalias", XXXX,
"-keystore", "\"" + KEYSTORE_PATH + "\"", "-keypass", PRIVATEKEY_PASS, "-storepass", KEYSTORE_PASS );
//Commande pour vérifier si le certificat a été importé
ProcessBuilder checkExistCertPb = new ProcessBuilder( "keytool", "-list", "-alias", XXXXX,
"-keystore", "\"" + KEYSTORE_PATH + "\"", "-storepass", KEYSTORE_PASS );
//Exécution de processus externe
Process importCertPbSt = importCertPb.start();
//Attendez la fin du processus
importCertPbSt.waitFor();
java::sample2.java
//Alias: exécutez la commande pour obtenir un certificat qui correspond à XXXX
Process checkExistCertPbSt = checkExistCertPb.start();
checkExistCertPbSt.waitFor();
InputStream in = checkExistCertPbSt.getInputStream();
try {
String line = null;
BufferedReader br = new BufferedReader(new InputStreamReader(in));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
Recommended Posts