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