前言:
虽然知道如何通过命令来完成keystore与jks的转换,之前写了keystore转jks,今天有需求需要把keystore转jks,下面就是本人整合的两种方法
java function 方式
这个方法是转载的,原来博客地址:http://blog.csdn.net/kgn28/article/details/4099167,亲测是可以的,并且代码比较简单,容易懂,顾手机下来,感谢原来博客作者。
标准keystore(standard jdk keystore types)包括:
JCEKS,JKS,PKCS12这几种格式,主要区别就是jceks可是用来存储对称密钥(分组密钥、私密密钥),而jks就只能存储非对称密钥对(私钥+x509公钥证书),pkcs12是通用格式(rsa公司标准)微软和java都支持。这里就产生了一个问题:使用java的keytool产生的keystore如何在微软的系统下使用(如何导入到ie中),解决方法就是先将jks的keystore变成pkcs12格式的keystore。其实jdk中存在一个keystore class,提供了抽象的通用对keystore操作的类,基于这个接口,实现了以下这个可是在两种格式之间互导的程序:
import java.security.KeyStore;
import java.security.Key;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class KeyStoreConvert{
public static void main(String[] args){
convert(args[0],args[1],args[2],args[3],args[4],args[5],
args[6],args[7],args[8],args[9],args[10]);
//convert("JKS","test.jks","abc123","kp2","abc123","kp2",
// "PKCS12","test.p12","abc123","kp2","abc123");
//convert("PKCS12","test.p12","abc123","kp2","abc123","kp2",
// "JKS","test1.jks","abc123","kp2","abc123");
}
public static void convert(String storeType1
, String stroe1FileName
, String store1Passwd
, String store1KeyAlias
, String store1KeyPasswd
, String store1CertChainAlias
, String storeType2
, String store2FileName
, String store2Passwd
, String store2KeyAlias
, String store2KeyPasswd ){
try{
FileInputStream fis = new FileInputStream(stroe1FileName);
KeyStore keyStore1 = KeyStore.getInstance(storeType1);
keyStore1.load (fis, store1Passwd.toCharArray());
Key key = keyStore1.getKey(store1KeyAlias ,store1KeyPasswd.toCharArray());
KeyFactory keyfact = java.security.KeyFactory.getInstance(key.getAlgorithm());
PrivateKey priKey = keyfact.generatePrivate(new PKCS8EncodedKeySpec(key.getEncoded()));
KeyStore keystore2 = KeyStore.getInstance(storeType2);
keystore2.load(null, null);
keystore2.setKeyEntry(store2KeyAlias, priKey, store2KeyPasswd.toCharArray(),keyStore1.getCertificateChain(store1CertChainAlias));
keystore2.store(new FileOutputStream(store2FileName), store2Passwd.toCharArray());
}catch(Exception e){
e.printStackTrace(System.out);
}
}
}
可能调用完方法,还需要其他的操作,但是毕竟已经到了很容易的一步,必须要装载如对应类型空文件就行。下面本人的方法中也有提到转载,希望对亲有用哈。
DOC命令方式
下面以我的1.keystore为例子,其中密码为123456,当然这个命令的灵感也是来自于上面的diamagnetic逻辑
keystore---->pfx
D:\>keytool -importkeystore -v -srckeystore 1.keystore -srcstoretype jks -srcstorepass 123456 -destkeystore key.pfx -deststoretype pkcs12 -deststorepass 123456
pfx------>jks
keytool -importkeystore -v -srckeystore D:\1.pfx -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore D:\1.jks -deststoretype jks -deststorepass 123456
亲自测试时可以的
就生成好了,哈哈,看了一些命令,虽然有些还是比较不懂,但是一直学习中,希望越来越好吧。简单粗暴能用就好。
-importkeystore 导入密钥库,通过格式设定,我们可以将PKCS#12文件转换为JKS格式。
-v显示详情
-srckeystore 源密钥库
-srcstoretype 源密钥库格式,这里为pkcs12
-srcstorepass 源密钥库密码,这里为123456
-destkeystore 目标密钥库
-deststoretype 目标密钥库格式,这里为jks,默认值也如此
-deststorepass 目标密钥库密码,这里为123456
比较官方的方法
下面的方法是来自http://www.willrey.com/support/jks_pfx.html
JKS和PFX文件相互转换方法
JKS(JavaKeysotre)格式和PFX(PKCS12)格式,是最常见的 SSL证书 格式文件,可以包含完整的证书密钥对,证书链和信任证书信息。PFX常用于Windows IIS服务器,JKS常用语JAVA类的WEB服务器,如TOMCAT,WEBLOGIC,JBOSS,RESIGN,虽然近年来,这些服务器新的版本,都是可以同时支持PFX,JKS文件格式了,但是老的版本和免费版本,往往都只支持JKS格式,所以当我们在不同WEB平台切换的时候,如何转换现有的SSL证书格式。希望可以帮到 VeriSign证书用户。
PFX文件转换为JKS文件
使用JWSDP工具包中的工具
安装J2SE 1.5,下载并运行jdk-1_5_0_09-windows-i586-p.exe
下载并安装jave web service develop pack, jwsdp-2_0-windows-i586.exe
创建一个新的keystore文件,里面的别名取做TEMP
keytool -genkey -alias temp -keyalg RSA -keystore server.jks
准备好要导入的PFX文件,server.pfx,运行:
C:\Sun\jwsdp-2.0\xws-security\bin\pkcs12import.bat pkcs12import -file server.p12 -alias server -keystore server.jks
查看server.jks 里面的证书记录:
keytool -list -v -keystore server.jks
JKS文件转换为PFX文件
通过jks2pfx工具
请下载:JKS2PFX转换工具。
将压缩包解开到 c:\jks2pfx 目录下,
运行以下命令:
JKS2PFX <导出文件名> [Java Runtime的目录]
备注:
KeyStore文件:指Tomcat保存SSL证书的文件
KeyStore密码:KeyStore文件对应的密码
Alias别名: 生成证书CSR时,所起的Alias别名
导出文件名: 准备导出的文件名称 (不要带扩展名)
Java Runtime的目录(可选): 指包含Java.exe和keytool.exe的目录,如:c:\progra~1\Java\jre1.5.0_06\bin
例如:
JKS2PFX server.jks 123456 tomcat exportfile c:\progra~1\Java\jre1.5.0_06\bin
该命令将server.jks中别名为tomcat的SSL证书导出,运行后将产生3个文件 exportfile.key、exportfile.crt、exportfile.pfx,exportfile.pfx可以导入到微软的IIS中,exportfile.key和exportfile.crt 可用于Apache或者OpenSSL兼容的系统。
可以用下面命令查看PFX文件内容:
openssl pkcs12 -info -in exportfile.pfx
PFX文件转换为X509证书文件和RSA密钥文件
通过Openssl命令行
openssl pkcs12 -in myssl.pfx -nodes -out server.pem
openssl rsa -in server.pem -out server.key
openssl x509 -in server.pem -out server.crt
不过,我更加喜欢简单粗暴的方法,比如方法2。先存着,希望对你我有用