IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]终结者:HTTPS在Tomcat中的使用(三)——Java代码生成密钥库文件及其对应的安全证书

    wangshuxuncom发表于 2016-11-25 10:38:33
    love 0

    生成密钥库文件:

            在博客《终结者:HTTPS在Tomcat中的使用(一)——生成密钥库文件与配置Tomcat服务器》中通过DOS命令生成了密钥库文件,但是那种方式比较繁琐,下面介绍如何通过Java代码快速生成密钥库文件:

    import java.io.File;
    
    public class CreateKeystore {
    
    	public static void main(String[] args) {
    		String keyStoreAlias = "ghj";//别名
    		String keystoreSavePath = "D:\\gaohuanjie.keystore";//密钥库存储位置
    		String keyStorePassword = "gaohuanjie";// 密钥库口令(获取keystore信息所需的密码)
    		//String dname = "CN=*.gaohuanjie.net.cn,OU=service operation department.,O=Elephant Netcom Science Technology Co.Ltd,L=深圳,ST=guangdong,C=cn";// CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(省/市/自治区名称), C=(单位的两字母国家代码)
    		String dname = "CN=ghj.zhangjie123.net.cn,OU=服务运营部,O=大象网通科技有限公司,L=深圳,ST=guangdong,C=cn";
    		String keyPassword = "gaohuanjie";// 指定别名条目的密码(私钥的密码)
    		createKeystore(keyStoreAlias, keystoreSavePath, keyStorePassword, dname, keyPassword);
    	}
    	
    	private static void createKeystore(String keyStoreAlias ,String keystoreSavePath ,String keyStorePassword ,String dname ,String keyPassword){
    		File file = new File(keystoreSavePath);
            if (file.isFile() && file.exists()) {
                file.delete();//删除原有密钥库文件
            }
    		StringBuffer command = new StringBuffer();
    		command.append("cmd /k start ")// cmd Shell命令
    		.append(" keytool")
    		.append(" -genkey")// -genkey 表示生成密钥
    		.append(" -keyalg RSA")// -keyalg 指定密钥的算法,诸如 RSA、DSA(默认值)
    		.append(" -keysize 1024")// -keysize 指定密钥长度
    		.append(" -validity 365")// -validity指定证书有效期(单位:天)
    		.append(" -alias "+keyStoreAlias)// -alias 指定别名
    		.append(" -keystore \""+keystoreSavePath+"\"")// -keystore指定存储位置
    		.append(" -storepass "+keyStorePassword)// -storepass 密钥库口令(获取keystore信息所需的密码)
    		.append(" -dname \""+dname+"\"")// -dname CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(省/市/自治区名称), C=(单位的两字母国家代码)"
    		.append(" -keypass "+keyPassword)// -keypass 指定别名条目的密码(私钥的密码)
    		.append(" -v");// -v 显示密钥库中的证书详细信息
    		
    		System.out.println(command);
    		try {
    			Runtime.getRuntime().exec(command.toString());
    			System.out.println("密钥库创建成功");
    		} catch (Exception e) {
    			System.out.println("密钥库创建失败");
    		}
    	}
    }
    注意:CN的值要输入域名,比如localhost、127.0.0.1、Tomcat所在计算机IP地址或者购买的域名(比如www.gaohuanjie.net.cn或*.gaohuanjie.net.cn,其中最后一个中的*为通配符,可以匹配任意以.gaohuanjie.net.cn结尾的域名)。

    密钥库文件生成所对应的安全证书:

            在博客《HTTPS在Tomcat中的使用(二)——制作安全证书与浏览器端安全证书的安装》中通过DOS命令生成了密钥库文件所对应的安全证书,但是那种方式比较繁琐,下面介绍如何通过Java代码快速生成安全证书:

    import java.io.File;
    
    /**
     * 生成客户端安全证书
     * 
     * @author GaoHuanjie
     */
    public class CreateCer {
    
    	public static void main(String[] args) {
    		String keyStorePath = "D:\\gaohuanjie.keystore";// 指定密钥库文件路径
    		String keyStoreAlias = "ghj";//密钥库别名
    		String keyStorePassword = "gaohuanjie";//密钥库的密码
    		String cerSavePath = "D:\\ghj.cer";//安全证书文件保存路径
    		createCer(keyStorePath, keyStoreAlias, keyStorePassword, cerSavePath);
    	}
    	
    	private static void createCer(String keyStorePath, String keyStoreAlias, String keyStorePassword, String cerSavePath){
    		if(!new File(keyStorePath).exists()){
    			System.err.println("密钥库文件不存在,无法生成安全证书");
    			return;
    		}
    		File file = new File(cerSavePath);
            if (file.isFile() && file.exists()) {
                file.delete();//删除原有安全证书
            }
    		StringBuffer command = new StringBuffer();
    		command.append("cmd /k start")// cmd Shell命令
    		.append(" keytool")
    		.append(" -exportcert") // 指定为导出操作
    		.append(" -keystore "+"\""+keyStorePath+"\"")// 指定密钥库文件路径
    		.append(" -alias "+keyStoreAlias) // 指定密钥库别名
    		.append(" -storepass "+keyStorePassword)// 指定密钥库的密码
    		.append(" -file "+"\""+cerSavePath+"\""); //指安全证书文件保存路径
    
    		System.out.println(command);
    		try {
    			Runtime.getRuntime().exec(command.toString());
    			System.out.println("成功导出证书");
    		} catch (Exception e) {
    			System.err.println("导出证书失败");
    		}
    	}
    }



沪ICP备19023445号-2号
友情链接