生成密钥库文件:
在博客《终结者: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("导出证书失败"); } } }