summaryrefslogtreecommitdiff
path: root/src/com/nis/nmsclient/thread/socket/SSLCertOper.java
diff options
context:
space:
mode:
authorchenjinsong <[email protected]>2018-09-27 16:11:54 +0800
committerchenjinsong <[email protected]>2018-09-27 16:11:54 +0800
commit56d71f261a8bd6031e47e2bf80867049a2aa13da (patch)
treef09257b2143782a333a9eda3395137837d9bdad1 /src/com/nis/nmsclient/thread/socket/SSLCertOper.java
initial commit
Diffstat (limited to 'src/com/nis/nmsclient/thread/socket/SSLCertOper.java')
-rw-r--r--src/com/nis/nmsclient/thread/socket/SSLCertOper.java238
1 files changed, 238 insertions, 0 deletions
diff --git a/src/com/nis/nmsclient/thread/socket/SSLCertOper.java b/src/com/nis/nmsclient/thread/socket/SSLCertOper.java
new file mode 100644
index 0000000..32cf8d0
--- /dev/null
+++ b/src/com/nis/nmsclient/thread/socket/SSLCertOper.java
@@ -0,0 +1,238 @@
+package com.nis.nmsclient.thread.socket;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.security.KeyStore;
+import java.security.SecureRandom;
+
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManagerFactory;
+
+import org.apache.log4j.Logger;
+
+import com.nis.nmsclient.common.Contants;
+import com.nis.nmsclient.util.DateUtil;
+import com.nis.nmsclient.util.Utils;
+
+public class SSLCertOper {
+ static Logger logger = Logger.getLogger(SSLCertOper.class);
+
+ public static SSLContext getSSLContext() throws Exception {
+ // 初始化上下文
+ SSLContext ctx = SSLContext.getInstance(Contants.SSL_JSSE_TYPE);
+ KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
+ KeyStore ks = KeyStore.getInstance(Contants.SSL_KEYSTORE_TYPE);
+ ks.load(new FileInputStream(Contants.SSL_KEY_STORE),
+ Contants.SSL_KEY_STORE_PASS.toCharArray());// 载入keystore
+ kmf.init(ks, Contants.SSL_KEY_PRIVATE_PASS.toCharArray());
+
+ TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
+ KeyStore tks = KeyStore.getInstance(Contants.SSL_KEYSTORE_TYPE);
+ tks.load(new FileInputStream(Contants.SSL_TRUST_KEY_STORE),
+ Contants.SSL_KEY_STORE_PASS.toCharArray());// 载入keystore
+ tmf.init(tks);
+
+ ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(),
+ new SecureRandom());
+ logger.debug("load keystore success.");
+
+ return ctx;
+ }
+
+ /**
+ * 创建 密匙对(私钥和公钥)
+ *
+ */
+ public static String createKeyAndCert(String aliasName, String storePath,
+ String localIp, String keyPass, String storePass, String certName) {
+ BufferedReader bReader = null;
+ Process process = null;
+ try {
+ process = Runtime.getRuntime().exec(
+ "keytool -genkey -v -alias " + aliasName
+ + " -keyalg RSA -storetype "
+ + Contants.SSL_KEYSTORE_TYPE + " -keystore "
+ + storePath + " -validity 90 -dname \"CN="
+ + localIp
+ + ",OU=cn,O=cn,L=cn,ST=cn,C=cn\" -storepass "
+ + storePass + " -keypass " + keyPass);
+ process.getOutputStream().close();
+ bReader = new BufferedReader(new InputStreamReader(process
+ .getInputStream()));
+ process.getErrorStream().close();
+ String line = null;
+ while ((line = bReader.readLine()) != null) {
+ System.out.println(line);
+ }
+
+ process = Runtime.getRuntime().exec(
+ "keytool -export -alias " + aliasName + " -storetype "
+ + Contants.SSL_KEYSTORE_TYPE + " -keystore "
+ + storePath + " -file " + certName + " -storepass "
+ + storePass + "");
+
+ bReader = new BufferedReader(new InputStreamReader(process
+ .getInputStream()));
+ while ((line = bReader.readLine()) != null) {
+ System.out.println(line);
+ }
+
+ return certName;
+ } catch (IOException e) {
+ logger.error("Create a key pair error!");
+ logger.error(Utils.printExceptionStack(e));
+ return null;
+ } finally {
+ if (bReader != null) {
+ try {
+ bReader.close();
+ } catch (IOException e) {
+ logger.error(Utils.printExceptionStack(e));
+ }
+ }
+ }
+
+ }
+
+ /**
+ * 将公钥引入KeyStore
+ *
+ */
+ public static boolean importCertToStore(String aliasName, String storePath,
+ String certName, String storePass) {
+ BufferedReader bReader = null;
+ PrintWriter pw = null;
+ try {
+ Process process = Runtime.getRuntime().exec(
+ "keytool -import -v -trustcacerts -alias " + aliasName
+ + " -keystore " + storePath + " -file " + certName
+ + " -storetype " + Contants.SSL_KEYSTORE_TYPE
+ + " -storepass " + storePass + "");
+
+ bReader = new BufferedReader(new InputStreamReader(process
+ .getInputStream()));
+ pw = new PrintWriter(process.getOutputStream());
+
+ pw.write("y");
+ pw.flush();
+ pw.close();
+
+ String line = null;
+ while ((line = bReader.readLine()) != null) {
+ System.out.println(line);
+ }
+
+ return true;
+ } catch (IOException e) {
+ logger.error("Error of importing authentication certificate!");
+ logger.error(Utils.printExceptionStack(e));
+ return false;
+ } finally {
+ if (pw != null) {
+ pw.close();
+ }
+ if (bReader != null) {
+ try {
+ bReader.close();
+ } catch (IOException e) {
+ logger.error(Utils.printExceptionStack(e));
+ }
+ }
+ }
+
+ }
+
+ /**
+ * 删除KeyStore库中的密钥
+ *
+ */
+ public static boolean deleteKeyOrCertFromStore(String aliasName,
+ String storePath, String storePass) {
+ BufferedReader bReader = null;
+ PrintWriter pw = null;
+ try {
+ Process process = Runtime.getRuntime().exec(
+ "keytool -delete -v -alias " + aliasName + " -keystore "
+ + storePath + " -storetype "
+ + Contants.SSL_KEYSTORE_TYPE + " -storepass "
+ + storePass + "");
+
+ bReader = new BufferedReader(new InputStreamReader(process
+ .getInputStream()));
+ pw = new PrintWriter(process.getOutputStream());
+
+ // pw.write("y");
+ pw.flush();
+ pw.close();
+
+ String line = null;
+ while ((line = bReader.readLine()) != null) {
+ System.out.println(line);
+ }
+
+ return true;
+ } catch (IOException e) {
+ logger.error("Delete" + storePath+ "library Key" + aliasName + "make a mistake!");
+ logger.error(Utils.printExceptionStack(e));
+ return false;
+ } finally {
+ if (pw != null) {
+ pw.close();
+ }
+ if (bReader != null) {
+ try {
+ bReader.close();
+ } catch (IOException e) {
+ logger.error(Utils.printExceptionStack(e));
+ }
+ }
+ }
+
+ }
+
+ /**
+ * test main
+ *
+ * @time Aug 28, 2011-12:17:28 PM
+ * @param args
+ */
+ public static void main(String args[]) {
+ String newServerKeyName = "serverks"
+ + DateUtil.getCurrentDate(DateUtil.YYYYMMDD);
+ String newServerKeyPsw = "123456";
+ String newClientkeyName = "clientks"
+ + DateUtil.getCurrentDate(DateUtil.YYYYMMDD);
+ String newClientkeyPsw = "123456";
+ String filepath0 = SSLCertOper.createKeyAndCert(newServerKeyName,
+ "D:\\workspace\\nms_client\\src\\key\\server_ks", "10.0.6.120",
+ newServerKeyPsw, "server",
+ "D:\\workspace\\nms_client\\src\\key\\server.cer");
+
+ SSLCertOper.importCertToStore(newServerKeyName,
+ "D:\\workspace\\nms_client\\src\\key\\client_ts",
+ "D:\\workspace\\nms_client\\src\\key\\server.cer", "client");
+
+ String filepath1 = SSLCertOper.createKeyAndCert(newClientkeyName,
+ "D:\\workspace\\nms_client\\src\\key\\client_ks", "localhost",
+ newClientkeyPsw, "client",
+ "D:\\workspace\\nms_client\\src\\key\\client.cer");
+
+ SSLCertOper.importCertToStore(newClientkeyName,
+ "D:\\workspace\\nms_client\\src\\key\\server_ts",
+ "D:\\workspace\\nms_client\\src\\key\\client.cer", "server");
+ System.out.println(filepath0);
+ System.out.println(filepath1);
+ // Config.setValueByName("ssl.server.key.old",
+ // Constants.SSL_SERVER_KEY_NEW);
+ // Config.setValueByName("ssl.server.key.old.psw",
+ // Constants.SSL_SERVER_KEY_NEW_PSW);
+ // Config.setValueByName("ssl.server.key.new",newServerKeyName);
+ // Config.setValueByName("ssl.server.key.new.psw", newServerKeyPsw);
+ // Config.setValueByName("ssl.client.key",newClientkeyName);
+ // Config.setValueByName("ssl.client.key.psw", newClientkeyPsw);
+ }
+}