Exécution de processus externe en Java

Chose que tu veux faire

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.

Préparation préalable

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.)

Source de l'échantillon

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();

Obtenir et afficher le résultat

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();
}

Article associé

Le chemin du fichier n'est pas reconnu lors de l'exécution d'une commande externe à partir d'une application Java

Recommended Posts

Exécution de processus externe en Java
Exécuter un processus externe en Java
Exécution parallèle en Java
processus thread-safe en java
Processus de mise en mémoire tampon Java
Changements dans Java 11
Janken à Java
Processus de vérification Java
Traitez n'importe quel nombre de cas dans la liste Java
Taux circonférentiel à Java
FizzBuzz en Java
Lire JSON en Java
Faites un blackjack avec Java
Programmation par contraintes en Java
Mettez java8 dans centos7
NVL-ish guy en Java
Joindre des tableaux en Java
"Hello World" en Java
Interface appelable en Java
Commentaires dans la source Java
Fonctions Azure en Java
Formater XML en Java
Simple htmlspecialchars en Java
Hello World en Java
Utiliser OpenCV avec Java
Mémorandum WebApi avec Java
Détermination de type en Java
Exécuter des commandes en Java (ping)
Divers threads en java
Implémentation du tri de tas (en java)
API Zabbix en Java
POST JSON en Java
Manipulation de la date dans Java 8
Nouveautés de Java 8
Utiliser PreparedStatement en Java
Nouveautés de Java 9,10,11
Ce que j'ai appris en Java (partie 3) Déclaration d'exécution des instructions
Essayez d'utiliser RocksDB avec Java
Évitez l'erreur que Yuma a donnée en Java
Obtenir des informations EXIF en Java
Modifier ini en Java: ini4j
L'histoire de Java dans ce monde
Exécution de débogage Java [pour les débutants Java]
Essayez d'appeler JavaScript en Java
Essayez le type fonctionnel en Java! ①
J'ai fait une roulette à Java.
Java et Iterator Part 1 External Iterator Edition
[Implémentation] Notes de classe de processus java
Implémentation de l'authentification en deux étapes en Java
Refactoring: faire du Blackjack en Java
Analyse de sujets (LDA) en Java
Identifiez les threads du processus Java qui gaspillent du processeur
Prétraitement NEologd en Java neologdn-java
Changer le codage Java dans Windows
API Java Stream en 5 minutes
Problème de ne pas trouver javax.annotation.Généré en Java 11