jks转为pkcs12格式

原创文章,鼓励转载请务必注明出处,作者:李佳

 

网上大多介绍如何使用openssl和keytool将pkcs12证书转为jks格式密钥库,很少有介绍jks转为pkcs12格式,原因是jks私钥无法用工具导出(至少我没找到导出的方法,如果哪位高手知道,希望指教).

具体步骤如下:

1.提取私钥

经过大量资料查找,终于找到一个可以提取jks密钥库中私钥的java程序:

package com.security.privatekey;

import sun.misc.BASE64Encoder;
import java.security.*;
import java.io.File;
import java.io.FileInputStream;
//EPKT.java
//Export private key tool
public class EPKT {
  public static void main(String args[]) throws Exception{
//       if(args.length!=5){
//           System.err.println("usage:java EPKT JKS|PKCS12|JCEKS keystoreFile storePWD alias privPWD");
//           System.exit(1);
//           }
      
     EPKT epkt = new EPKT();
//     epkt.exec(args[0],args[1],args[2],args[3],args[4]);
     epkt.exec("jks","C:/myfolder/Programs/bea/jdk150_04/bin/mykeystore2","helloworld","mytest","helloworld");
  }

  public void exec(String storeType,String storeFile,String storePWD,String alias,String privPWD) throws Exception{
     //密钥库类型.
     KeyStore ks = KeyStore.getInstance(storeType);
     //密钥库
     File file = new File(storeFile);
     //密码
     char[] pwd = storePWD.toCharArray();
     //base64编码器
     BASE64Encoder base64Encoder = new BASE64Encoder();
     //打开密钥库
     ks.load(new FileInputStream(file), pwd);
     pwd=privPWD.toCharArray();
     Key key = ks.getKey(alias, pwd);
     //清空密码
     pwd=null;
     if (key instanceof PrivateKey) {
         String privString = base64Encoder.encode(key.getEncoded());
         System.out.println("-----BEGIN PRIVATE KEY-----");
        System.out.println(privString);
        System.out.println("-----END PRIVATE KEY-----");
     }
  }
}

2.将私钥保存在key.pem文件中.

3.合并成pfx证书

假设公钥证书文件名为client.crt, 私钥文件名为key.pem

使用openssl工具生成pfx证书 openssl pkcs12 -export -clcerts -in client.crt -inkey key.pem -out client.pfx

另外,找到个网站,OpenSSL在线生成合成PFX文件,大家可以试试https://www.myssl.cn/openssl/createpfx.asp

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值