Android KEYSTORE文件签名-->JKS文件签名

前言:

虽然知道如何通过命令来完成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。先存着,希望对你我有用

猜你喜欢

转载自blog.csdn.net/onlymetagain/article/details/78840833