
org.globus.tools.ChangePassPhrase Maven / Gradle / Ivy
The newest version!
/*
* Copyright 1999-2010 University of Chicago
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is
* distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
*
* See the License for the specific language governing permissions and limitations under the License.
*/
package org.globus.tools;
import java.security.GeneralSecurityException;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.globus.gsi.OpenSSLKey;
import org.globus.gsi.CertUtil;
import org.globus.gsi.bc.BouncyCastleOpenSSLKey;
import org.globus.util.Util;
import org.globus.common.CoGProperties;
import org.globus.common.Version;
/** Changes the Passphrase.
*
* Syntax: java ChangePassPhrase [-help] [-version] [-file private_key_file]
* Changes the passphrase that protects the private key. If the -file
* argument is not given, the default location of the file containing
* the private key is assumed:
* -- Config.getUserKeyFile()
* Options
* -help, -usage Display usage
* -version Display version
* -file location Change passphrase on key stored in the
* file at the non-standard
* location 'location';
*
*/
public class ChangePassPhrase {
private static String message =
"\n" +
"Syntax: java ChangePassPhrase [-help] [-version] [-file private_key_file]\n\n" +
"\tChanges the passphrase that protects the private key. If the\n" +
"\t-file argument is not given, the default location of the file\n" +
"\tcontaining the private key is assumed:\n\n" +
"\t -- " + CoGProperties.getDefault().getUserKeyFile() + "\n\n" +
"\tOptions\n" +
"\t-help | -usage\n" +
"\t\tDisplay usage.\n" +
"\t-version\n" +
"\t\tDisplay version.\n" +
"\t-file location\n" +
"\t\tChange passphrase on key stored in the file at\n" +
"\t\tthe non-standard location 'location'.\n\n";
public static void main(String args[]) {
String file = null;
boolean error = false;
boolean debug = false;
for (int i = 0; i < args.length; i++) {
if (args[i].equalsIgnoreCase("-file")) {
file = args[++i];
} else if (args[i].equalsIgnoreCase("-version")) {
System.err.println(Version.getVersion());
System.exit(1);
} else if (args[i].equalsIgnoreCase("-debug")) {
debug = true;
} else if (args[i].equalsIgnoreCase("-help") ||
args[i].equalsIgnoreCase("-usage")) {
System.err.println(message);
System.exit(1);
} else {
System.err.println("Error: argument not recognized : " + args[i]);
error = true;
}
}
if (error) {
System.err.println("\nUsage: java ChangePassPhrase [-help] [-version] [-file private_key_file]\n");
System.err.println("Use -help to display full usage.");
System.exit(1);
}
CertUtil.init();
if (file == null) {
file = CoGProperties.getDefault().getUserKeyFile();
}
OpenSSLKey key = null;
String pwd1, pwd2 = null;
try {
key = new BouncyCastleOpenSSLKey(file);
if (key.isEncrypted()) {
pwd1 = Util.getPrivateInput("Enter OLD pass phrase: ");
if (pwd1 == null || pwd1.length() == 0) return;
try {
key.decrypt(pwd1);
} catch(Exception e) {
System.err.println("Error: Wrong pass phrase or key is invalid.");
if (debug) {
e.printStackTrace();
}
System.exit(1);
}
}
pwd1 = Util.getPrivateInput("Enter NEW pass phrase: ");
if (pwd1 == null || pwd1.length() == 0) return;
pwd2 = Util.getPrivateInput("Verifying password - Enter NEW pass phrase: ");
if (pwd2 == null || pwd2.length() == 0) return;
if (!pwd1.equals(pwd2)) {
System.err.println("Error: Passwords do not match!");
System.exit(1);
}
key.encrypt(pwd1);
File newFile = Util.createFile(file + ".new");
Util.setOwnerAccessOnly(newFile.getAbsolutePath());
File oldFile = Util.createFile(file + ".old");
Util.setOwnerAccessOnly(oldFile.getAbsolutePath());
File crFile = Util.createFile(file);
Util.setOwnerAccessOnly(crFile.getAbsolutePath());
copy(crFile, oldFile);
key.writeTo(newFile.getAbsolutePath());
if (!crFile.delete()) {
System.err.println("Error: failed to remove " + file + " file.");
System.exit(1);
}
if (newFile.renameTo(crFile)) {
System.out.println("Pass phrase successfully changed.");
} else {
System.err.println("Error: failed to rename the files.");
System.exit(1);
}
} catch(GeneralSecurityException e) {
System.err.println("Error: " + e.getMessage());
System.exit(1);
} catch(Exception e) {
System.err.println("Unable to load the private key : " + e.getMessage());
System.exit(1);
}
}
private static void copy(File srcFile, File dstFile)
throws IOException {
InputStream in = null;
OutputStream out = null;
byte [] buffer = new byte[1024];
int bytes = 0;
try {
in = new FileInputStream(srcFile);
out = new FileOutputStream(dstFile);
Util.setOwnerAccessOnly(dstFile.getAbsolutePath());
while( (bytes = in.read(buffer)) != -1) {
out.write(buffer, 0, bytes);
out.flush();
}
} finally {
try {
if (in != null) in.close();
if (out != null) out.close();
} catch(Exception e) {}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy