`

PKCS12与JKS格式证书库转换工具

阅读更多

闲话不多说,直接上代码,如果不知CA、PKI、PKCS12等为何物的兄弟姐妹,不妨飘过:

package com.javaeye.sheng.security;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.util.Enumeration;


/**
 * <p>Title: PKCS12与JKS格式证书库转换工具</p>
 * <p>Description: 该工具可以把JKS和PKCS12格式的证书库相互转换</p>
 * <p>Copyright: Copyright (c) 2009</p>
 * <p>Company: </p>
 *
 * @author BrokenStone(wdmsyf@yahoo.com)
 * @version 1.0
 */

public class KeyStoreConv {
  /**
   * 从PKCS12格式转换为JKS格式
   * @param srcFile String PKCS12格式的证书库
   * @param srcPasswd String PKCS12格式的证书库密码
   * @param destFile String JKS格式的证书库
   * @param destPasswd String  JKS格式的证书库密码
   */
  public void PKCS12ToJKS(String srcFile, String srcPasswd, String destFile, String destPasswd){
    try {
      KeyStore inputKeyStore = KeyStore.getInstance("PKCS12");
      FileInputStream fis = new FileInputStream(srcFile);
      char[] srcPwd = null, destPwd = null;

      if ((srcPasswd == null) || srcPasswd.trim().equals("")) {
        srcPwd = null;
      } else {
        srcPwd = srcPasswd.toCharArray();
      }

      if ((destPasswd == null) || destPasswd.trim().equals("")) {
        destPwd = null;
      } else {
        destPwd = destPasswd.toCharArray();
      }

      inputKeyStore.load(fis, srcPwd);
      fis.close();
      
      KeyStore outputKeyStore = KeyStore.getInstance("JKS");
      outputKeyStore.load(null, destPwd);
      Enumeration enums = inputKeyStore.aliases();

      while (enums.hasMoreElements()) { 
        String keyAlias = (String) enums.nextElement();
        System.out.println("alias=[" + keyAlias + "]");
        if (inputKeyStore.isKeyEntry(keyAlias)) {
          Key key = inputKeyStore.getKey(keyAlias, srcPwd);
          Certificate[] certChain = inputKeyStore.getCertificateChain(keyAlias);
          outputKeyStore.setKeyEntry(keyAlias, key, destPwd, certChain);
        }
      }

      FileOutputStream out = new FileOutputStream(destFile);
      outputKeyStore.store(out, destPwd);
      out.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  /**
   * 从JKS格式转换为PKCS12格式
   * @param srcFile String JKS格式证书库
   * @param srcPasswd String JKS格式证书库密码
   * @param destFile String PKCS12格式证书库
   * @param destPasswd String PKCS12格式证书库密码
   */
  public void JSKToPKCS12(String srcFile, String srcPasswd, String destFile, String destPasswd){
    try {
      KeyStore inputKeyStore = KeyStore.getInstance("JKS");
      FileInputStream fis = new FileInputStream(srcFile);
      char[] srcPwd = null, destPwd = null;

      if ((srcPasswd == null) || srcPasswd.trim().equals("")) {
        srcPwd = null;
      } else {
        srcPwd = srcPasswd.toCharArray();
      }
      if ((destPasswd == null) || destPasswd.trim().equals("")) {
        destPwd = null;
      } else {
        destPwd = destPasswd.toCharArray();
      }
      
      inputKeyStore.load(fis, srcPwd);
      fis.close();
      
      KeyStore outputKeyStore = KeyStore.getInstance("PKCS12");

      Enumeration enums = inputKeyStore.aliases();

      while (enums.hasMoreElements()) {
        String keyAlias = (String) enums.nextElement();
        System.out.println("alias=[" + keyAlias + "]");

        outputKeyStore.load(null, destPwd );
        if (inputKeyStore.isKeyEntry(keyAlias)) {
          Key key = inputKeyStore.getKey(keyAlias, srcPwd);
          Certificate[] certChain = inputKeyStore.getCertificateChain(keyAlias);
          outputKeyStore.setKeyEntry(keyAlias, key, destPwd, certChain);
        }

        String fName = destFile.substring(0, destFile.indexOf(".pfx"));
        fName += "_" + keyAlias + ".pfx";
        FileOutputStream out = new FileOutputStream(fName);
        outputKeyStore.store(out, destPwd);
        out.close();
        outputKeyStore.deleteEntry(keyAlias);
      }

    } catch (Exception e) {
      e.printStackTrace();
    }
  }


  public static void main(String[] args) {
    String flag = "P2J";
    if(args.length<5) {
      System.out.println("用法:");
      System.out.println("    KeyStoreConv <转换标志> <源证书库文件名> <源证书库密码> <目标证书库文件名> <目标证书库密码>");
      System.out.println("    转换标志: P2J -- 从PKCS12转换为JKS格式");
      System.out.println("             J2P -- 从JKS转换为PKCS12格式");
      System.out.println("      注意: 1、如果从JKS转换为PKCS12且源JKS中有多个密钥对或证书,则每个密钥对或证书单独保存为一个文件。");
    }else{
      flag = args[0].toUpperCase();
      if (!(flag.equals("P2J") || flag.equals("J2P"))) flag = "P2J";

      KeyStoreConv c = new KeyStoreConv();
      if (flag.equals("P2J")) {
        c.PKCS12ToJKS(args[1], args[2], args[3], args[4]);
      } else {
        c.JSKToPKCS12(args[1], args[2], args[3], args[4]);
      }
    }
  }
}

 

分享到:
评论
1 楼 bevis.cn 2009-12-02  
那我原来的key是用openssl产生的,现在要用jdk里的keytool来import,这样也是可以的吗

相关推荐

    PKCS12与JKS格式转换器

    这里我们关注的是两种常见的密钥库格式:PKCS12(Personal Certificate Security Standard 12)和JKS(Java Key Store)。本文将深入探讨这两种格式,以及如何进行相互转换。 PKCS12是一种由RSA Security开发的标准...

    nginx证书转换jks

    使用OpenSSL工具从PKCS12格式的证书库中提取证书文件(server-ssl.crt)和中级证书文件(gs_intermediate_ca.crt): ``` openssl pkcs12 -in newkeystore.p12 -nokeys -clcerts -out server-ssl.crt openssl pkcs12 -in...

    JKS2PFX证书转换工具 支持jdk生成证书转换

    而"JKS2PFX证书转换工具"就是针对这些需求应运而生的,它专门用于处理Java Key Store(JKS)和PKCS#12(PFX)格式的证书,以适应不同环境和应用场景。 首先,我们需要理解JKS和PFX这两种类型的证书存储格式。Java ...

    jks与pfx转换工具

    将jks文件生成pfx文件的工具,亲测可以使用。 例如: JKS2PFX server.jks 123456 tomcat exportfile c:\progra~1\Java\jre1.5.0_06\bin 该命令将server.jks中别名为tomcat的SSL证书导出,运行后将产生3个文件 ...

    Tomcat更换SSL证书方法(jks与pfx转换)

    使用JWSDP工具包中的`pkcs12import`工具将PFX文件转换为JKS格式。执行以下命令: ```bash C:\Sun\jwsdp-2.0\xws-security\bin\pkcs12import.bat pkcs12import -file server.p12 -alias server -keystore server.jks...

    证书转换生成工具protecle

    **证书与证书转换工具Protecle详解** 在数字安全领域,证书扮演着至关重要的角色,它们用于验证身份、加密通信以及确保数据的完整性。本文将深入探讨证书的概念,特别是Protecle工具,它是一个功能强大的证书管理和...

    pfx证书安装

    1. 证书格式:JKS和PFX是两种常见的证书格式,JKS格式证书是Java密钥库格式,PFX格式证书是PKCS#12格式。 2. 证书安装:证书安装是指将证书安装到服务器中,以便启用HTTPS协议。 3. openssl命令行工具:openssl是...

    jks2pfx工具

    《使用jks2pfx工具将JKS转换为PFX:详细步骤与原理解析》 在数字证书领域,JKS(Java Key Store)和PFX(Personal Information Exchange)是两种常见的密钥存储格式。JKS主要用于Java应用程序,而PFX则广泛应用于...

    Tomcat9.0安装JKS格式SSL证书.rar

    2. **转换PFX到JKS**:由于Tomcat默认使用JKS格式,我们需要将PFX格式的证书转换为JKS。这可以通过Java的keytool工具完成,命令类似于: ``` keytool -importkeystore -deststorepass &lt;JKS_password&gt; -destkeypass...

    SSL中各证书的转换

    本文将详细介绍如何在不同的证书格式之间进行转换,包括从`.cer`到`.jks`、从`.jks`到`.cer`、从`.p12`到`.pem`以及从`.cer`到`.pem`的过程。 ### 1. `.cer`格式转换至`.jks`格式 #### 背景介绍 `.cer`文件通常...

    数字证书查看、拆分和格式转换工具

    例如,当需要将一个Java应用部署到支持不同类型的keystore格式的服务器时,或者在跨平台的环境中,可能需要将JKS格式的keystore转换为PKCS#12(PFX或P12)格式,然后从中提取crt和key。这通常涉及到使用OpenSSL或...

    jks转pfx,jks导出pfx证书

    使用keytool.exe,将jks格式证书转换成pfx格式证书。由于本工具未包括keytool.exe 需要安装jdk 才能够正常运行。 没有积分的用户可以根据以下命令行手动导出(keytool.exe 可以在jdk安装目录中找到): keytool.exe ...

    jks文件转bks文件.zip

    4. **转换过程**:要将`jks`文件转换为`bks`文件,你需要使用相应的工具或命令行工具,如`keytool`(Java自带)或者`Portecle`(一个图形化的密钥管理和转换工具)。这个过程中通常需要输入源密钥库的密码,以及目标...

    证书转换portecle-1.9.zip

    4. **JKS**:Java KeyStore是Java平台内置的密钥库格式,用于存储用户证书和私钥,通常用于Java应用的HTTPS配置。 接下来,我们将讨论如何使用Portecle进行证书转换: 1. **P12转BKS**: - 打开Portecle,选择...

    Android签名文件jks和keystore相互装换.zip

    这个命令将`myapp.jks`转换为PKCS12格式的Keystore文件`myapp.keystore`。 2. **Keystore转JKS** 反过来,如果你有一个Keystore文件,例如`myapp.keystore`,想要转换回JKS,可以这样做: ```bash keytool -...

    Android签名生成工具和签名格式转换工具

    本文将深入探讨Android签名生成工具以及签名格式转换工具的相关知识。 一、Android签名的概念与作用 1.1 定义:Android签名是一个数字证书,它包含开发者的信息(如名称、组织和证书有效期)以及用于验证应用的私钥...

    java生成证书 包括openssl

    5. 将服务端证书和私钥转换为 PKCS12 格式:`openssl pkcs12 -export -in server.crt -inkey server.key -out server.pkcs12` 这将将服务端证书和私钥转换为 PKCS12 格式,用于 Java 应用程序。 使用 keytool 生成...

    数字证书格式详细说明

    Java KeyStore 的类型有 JKS、JCEKS、PKCS12、BKS、UBER 等。 JKS 是 Java 密钥库的类型之一,由 SUN 提供,位于每个版本的 JDK 中。JCEKS 是 Java 密钥库的类型之一,由 SUNJCE 提供,在安全级别上比 JKS 强。 ...

    portecle-1.9.zip

    Portecle是一款强大的证书管理与转换工具,专为弥补Java自带的keytool命令行工具在图形界面操作上的不足而设计。这款应用提供了直观且用户友好的界面,使得证书相关的操作如查看、创建、导入和导出等变得更为简单。...

    如何配置https示例(证书需要自己去网上找或者买)

    PFX则是PKCS#12格式,是一种通用的证书存储格式,可用于多种平台。 ####JKS证书的安装和配置 如果需要安装JKS格式的证书,可以使用Java的`keytool`工具来进行证书的导入和转换。具体操作步骤如下: 1. 使用`keytool...

Global site tag (gtag.js) - Google Analytics