package com.nms.server.thread.socket;

import java.io.File;

import com.nms.server.common.Config;
import com.nms.server.common.Constants;
import com.nms.server.util.DateUtil;

public class SSLCertManager extends SSLCertOper{
	/**
	 * test main
	 * @time Aug 28, 2011-12:17:28 PM
	 * @param args
	 */
	public static void main(String args[]) {
		createServerKeyStoreAndCert();
	}
	
	/**
	 * 程序启动初始化操作 （已测试）
	 * 初始化原始证书文件
	 * @time Aug 28, 2011-6:46:10 PM
	 */
	public void initCheckForServer(){
		//服务端 证书别名 和 密码
		String certPath = Constants.SYSTEM_PATH + File.separator	+ Constants.SSL_DIR ;
		String newServerKeyName = "serverks"+DateUtil.getCurrentDate(DateUtil.YYYYMMDD);
		String newServerKeyPsw = "123456";
		//客户端 证书别名 和 密码
		String newClientkeyName = "clientks"+DateUtil.getCurrentDate(DateUtil.YYYYMMDD);
		String newClientkeyPsw = "123456";
		//创建服务端证书并导出公钥
		//-- 判断服务端公钥是否存在
		if(!new File(certPath + File.separator+"server.cer").exists()){
			String filepath0 = createKeyAndCert(
					newServerKeyName ,
					certPath+File.separator+Constants.SSL_SERVER_STORE,
					"10.0.6.113", newServerKeyPsw,
					certPath + File.separator+"server.cer");
			//向客户端公钥证书库引入服务端公钥
			importCertToStore(
					newServerKeyName,
					certPath + File.separator + Constants.SSL_CLIENT_TRUST,
					certPath + File.separator+"server.cer");
		}
		//-- 判断客户端公钥是否存在
		if(!new File(certPath + File.separator+"client.cer").exists()){
			//创建客户端证书并导出公钥
			String filepath1 = createKeyAndCert(
					newClientkeyName,
					certPath + File.separator + Constants.SSL_CLIENT_STORE,
					"localhost", newClientkeyPsw,
					certPath + File.separator+"server.cer");
			//向服务店公钥证书库引入客户端公钥
			importCertToStore(
					newClientkeyName,
					certPath+File.separator+Constants.SSL_SERVER_TRUST,
					certPath + File.separator+"client.cer");
		}
		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);
	}
	/**
	 * 服务端创建密匙对
	 * @time Aug 28, 2011-7:15:27 PM
	 */
	public static String createServerKeyStoreAndCert(){
		//服务端 证书别名 和 密码
		String certPath = Constants.SYSTEM_PATH + File.separator	+ Constants.SSL_DIR ;
		String newServerKeyName = "serverks"+DateUtil.getCurrentDate(DateUtil.YYYYMMDD);
		String newServerKeyPsw = "123456";
		//-- 判断服务端公钥是否存在
		if(new File(certPath + File.separator+"server.cer").exists()){
			deleteKeyOrCertFromStore(newServerKeyName, certPath+File.separator+Constants.SSL_SERVER_STORE);
		}
		//创建服务端证书并导出公钥
		String filepath0 = createKeyAndCert(
				newServerKeyName ,
				certPath+File.separator+Constants.SSL_SERVER_STORE,
				"10.0.6.113", newServerKeyPsw,
				certPath + File.separator+"server.cer");
		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);
		return certPath + File.separator+"server.cer";
	}
}
