Externe Prozessausführung in Java

Was du machen willst

Ich möchte, dass Keytool eine p12-Datei in cacert (Java-Keystore) importiert. Das manuelle Ausführen des Imports von der Befehlszeile im tatsächlichen Betrieb ist zeitaufwändig und unrealistisch. Daher möchte ich ihn als Prozess einer laufenden Webanwendung einbeziehen.

Vorbereitungen

Da es so eingestellt wurde, dass nur der Administrator cacerts neu schreiben kann, erhält der Benutzer, der die Webanwendung ausführt, ebenfalls die Berechtigung. (Das Zertifikat konnte nur importiert werden, wenn die Eingabeaufforderung mit Administratorrechten ausgeführt wurde.)

Beispielquelle

sample1.java


String JRE_PATH = "C:\\Program Files\\Java\\jre1.8.0_144";
String KEYSTORE_PATH = JRE_PATH + "\\lib\\security\\cacerts"; //cacerts Pfad
String CERTFILE_PATH = "cert.p12"; //p12 Dateipfad
String ALIAS = "test"; //alias
String KEYSTORE_PASS = "changeit"; //Keystore-Passwort
String PRIVATEKEY_PASS = "root"; //Zertifikat Passwort

//Befehl zum Importieren des Zertifikats
ProcessBuilder importCertPb = new ProcessBuilder( "keytool", "-importkeystore", "-keystore",
                "\"" + KEYSTORE_PATH + "\"", "-srckeystore",
                CERTFILE_PATH, "-srcstoretype", "PKCS12", "-srcstorepass", PRIVATEKEY_PASS, "-deststorepass",
                KEYSTORE_PASS );

//Da es mit dem Alias "1" importiert wird, geben Sie ihm einen Alias
// XXXX:Alias (wie ein Name, der das Zertifikat eindeutig identifiziert)
ProcessBuilder changeAliasPb = new ProcessBuilder( "keytool", "-changealias", "-alias", "1", "-destalias", XXXX,
        "-keystore", "\"" + KEYSTORE_PATH + "\"", "-keypass", PRIVATEKEY_PASS, "-storepass", KEYSTORE_PASS );

//Befehl zum Überprüfen, ob das Zertifikat importiert wurde
ProcessBuilder checkExistCertPb = new ProcessBuilder( "keytool", "-list", "-alias", XXXXX,
        "-keystore", "\"" + KEYSTORE_PATH + "\"", "-storepass", KEYSTORE_PASS );

//Externe Prozessausführung
Process importCertPbSt = importCertPb.start();

//Warten Sie, bis der Vorgang beendet ist
importCertPbSt.waitFor();

Holen Sie sich das Ergebnis und geben Sie es aus

java::sample2.java


//Alias: Führen Sie den Befehl aus, um ein Zertifikat zu erhalten, das XXXX entspricht
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();
}

In Verbindung stehender Artikel

Der Dateipfad wird beim Ausführen eines externen Befehls über eine Java-App nicht erkannt

Recommended Posts

Externe Prozessausführung in Java
Führen Sie einen externen Prozess in Java aus
Parallele Ausführung in Java
Thread-sicherer Prozess in Java-Sprache
Java-Pufferprozess
Änderungen in Java 11
Janken in Java
Java-Überprüfungsprozess
Verarbeiten Sie eine beliebige Anzahl von Fällen in Java List
Umfangsrate in Java
FizzBuzz in Java
Lesen Sie JSON in Java
Machen Sie einen Blackjack mit Java
Einschränkungsprogrammierung in Java
Setzen Sie Java8 in Centos7
NVL-artiger Typ in Java
Verbinden Sie Arrays in Java
"Hallo Welt" in Java
Aufrufbare Schnittstelle in Java
Kommentare in der Java-Quelle
Azure funktioniert in Java
Formatieren Sie XML in Java
Einfache HTML-Spezialchars in Java
Hallo Welt in Java
Verwenden Sie OpenCV mit Java
WebApi-Memorandum mit Java
Typbestimmung in Java
Befehle in Java ausführen (Ping)
Verschiedene Threads in Java
Implementierung der Heap-Sortierung (in Java)
Zabbix API in Java
POST JSON in Java
Datumsmanipulation in Java 8
Was ist neu in Java 8?
Verwenden Sie PreparedStatement in Java
Was ist neu in Java 9,10,11
Was ich in Java gelernt habe (Teil 3) Anweisung zur Ausführung von Anweisungen
Versuchen Sie es mit RocksDB mit Java
Vermeiden Sie den Fehler, den Yuma in Java gemacht hat
Holen Sie sich EXIF-Informationen in Java
Bearbeiten von ini in Java: ini4j
Java-Geschichte in dieser Welt
Java-Debug-Ausführung [für Java-Anfänger]
Versuchen Sie, JavaScript in Java aufzurufen
Probieren Sie den Funktionstyp in Java aus! ①
Ich habe ein Roulette in Java gemacht.
Java und Iterator Teil 1 Externe Iterator Edition
[Implementierung] Java Prozessklassennotizen
Implementierung der zweistufigen Authentifizierung in Java
Refactoring: Machen Sie Blackjack in Java
Themenanalyse (LDA) in Java
Identifizieren Sie Threads im Java-Prozess, die CPU verschwenden
NEologd-Vorverarbeitung in Java neologdn-java
Ändern Sie die Java-Codierung in Windows
Java Stream API in 5 Minuten
Problem beim Finden von javax.annotation.Generated in Java 11 nicht