`
flyPig
  • 浏览: 139602 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

keystore证书转换

阅读更多
常用的证书库:
JKS和JCEKS是Java密钥库(KeyStore)的两种比较常见类型,JKS的Provider是SUN,在每个版本的JDK中都有,JCEKS的Provider是SUNJCE,1.4后我们都能够直接使用它。
JCEKS在安全级别上要比JKS强,使用的Provider是JCEKS(推荐),尤其在保护KeyStore中的私钥上(使用TripleDES)
PKCS#12(PFX)是公钥加密标准,它规定了可包含所有私钥、公钥和证书。其以二进制格式存储,在windows中可以直接导入到密钥区,注意,PKCS#12的密钥库保护密码同时也用于保护Key。
BKS来自BouncyCastleProvider,它使用的也是TripleDES来保护密钥库中的Key,它能够防止证书库被不小心修改(Keystore的keyentry改掉1个bit都会产生错误),BKS能够跟JKS互操作。
UBER比较特别,当密码是通过命令行提供的时候,它只能跟keytool交互。整个keystore是通过PBE/SHA1/Twofish加密,因此keystore能够防止被误改、察看以及校验。SunJDK允许你在不提供密码的情况下直接加载一个Keystore,类似cacerts,UBER不允许这种情况。

PFX转成JKS
    public static final String PKCS12 = "PKCS12";
    public static final String JKS = "JKS";
/**
     * PFX证书转换为JKS(Java Key Store)
     * 
     * @param pfxPassword
     *            PFX证书密码
     * @param pfxFilePath
     *            PFX证书路径
     * @param jksPassword
     *            JKS证书密码
     * @param jksFilePath
     *            JKS证书路径
     */
    public static void covertPFXtoJKS(String pfxPassword, String pfxFilePath, String jksPassword, String jksFilePath)
    {
        FileInputStream fis = null;
        FileOutputStream out = null;
        try
        {
            // 加载PFX证书
            KeyStore inputKeyStore = KeyStore.getInstance(PKCS12);
            fis = new FileInputStream(pfxFilePath);
            char[] inPassword = pfxPassword == null ? null : pfxPassword.toCharArray();
            char[] outPassword = jksPassword == null ? null : jksPassword.toCharArray();
            inputKeyStore.load(fis, inPassword);

            KeyStore outputKeyStore = KeyStore.getInstance(JKS);
            outputKeyStore.load(null, outPassword);
            Enumeration<String> enums = inputKeyStore.aliases();
            while (enums.hasMoreElements())
            {
                String keyAlias = enums.nextElement();
                if (inputKeyStore.isKeyEntry(keyAlias))
                {
                    Key key = inputKeyStore.getKey(keyAlias, inPassword);
                    Certificate[] certChain = inputKeyStore.getCertificateChain(keyAlias);
                    outputKeyStore.setKeyEntry(keyAlias, key, pfxPassword.toCharArray(), certChain);
                }
            }
            out = new FileOutputStream(jksFilePath);
            outputKeyStore.store(out, outPassword);
        } catch (Exception e)
        {
            e.printStackTrace();
        } finally
        {
            try
            {
                if (fis != null)
                {
                    fis.close();
                }
                if (out != null)
                {
                    out.close();
                }
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }


从JKS格式转换为PKCS12格式
/**
     * 从JKS格式转换为PKCS12格式
     * 
     * @param jksFilePath
     *            String JKS格式证书库路径
     * @param jksPasswd
     *            String JKS格式证书库密码
     * @param pfxFilePath
     *            String PKCS12格式证书库保存文件夹
     * @param pfxPasswd
     *            String PKCS12格式证书库密码
     */
    public void covertJSKToPFX(String jksFilePath, String jksPasswd, String pfxFolderPath, String pfxPasswd) throws Throwable
    {
        FileInputStream fis = null;
        try
        {
            KeyStore inputKeyStore = KeyStore.getInstance(JKS);
            fis = new FileInputStream(jksFilePath);
            char[] srcPwd = jksPasswd == null ? null : jksPasswd.toCharArray();
            char[] destPwd = pfxPasswd == null ? null : pfxPasswd.toCharArray();
            inputKeyStore.load(fis, srcPwd);

            KeyStore outputKeyStore = KeyStore.getInstance(PKCS12);
            Enumeration<String> 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 = pfxFolderPath + "_" + keyAlias + ".pfx";
                FileOutputStream out = new FileOutputStream(fName);
                outputKeyStore.store(out, destPwd);
                out.close();
                outputKeyStore.deleteEntry(keyAlias);
            }
        } finally
        {
            try
            {
                if (fis != null)
                {
                    fis.close();
                }
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }


列出所有X509证书的属性,功能类似于keytool -list
/**
     * 列出JKS库内所有X509证书的属性
     * 
     * @param jksFilePath
     *            证书库路径
     * @param jksPasswd
     *            证书库密码
     * @param algName
     *            库类型
     */
    public static void listAllCerts(String jksFilePath, String jksPasswd, String algName)
    {
        try
        {
            char[] srcPwd = jksPasswd == null ? null : jksPasswd.toCharArray();
            FileInputStream in = new FileInputStream(jksFilePath);
            KeyStore ks = KeyStore.getInstance(algName);
            ks.load(in, srcPwd);
            Enumeration<String> e = ks.aliases();
            while (e.hasMoreElements())
            {
                String alias = e.nextElement();
                Certificate cert = ks.getCertificate(alias);
                if (cert instanceof X509Certificate)
                {
                    X509Certificate X509Cert = (X509Certificate) cert;
                    System.out.println("**************************************");
                    System.out.println("版本号:" + X509Cert.getVersion());
                    System.out.println("序列号:" + X509Cert.getSerialNumber().toString(16));
                    System.out.println("主体名:" + X509Cert.getSubjectDN());
                    System.out.println("签发者:" + X509Cert.getIssuerDN());
                    System.out.println("有效期:" + X509Cert.getNotBefore());
                    System.out.println("签名算法:" + X509Cert.getSigAlgName());
                    System.out.println("输出证书信息:\n" + X509Cert.toString());
                    System.out.println("**************************************");
                }
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }

分享到:
评论
1 楼 seeallsea 2011-10-19  
不错!可以相互转换了。

相关推荐

    PFX格式证书和JAVA keyStore证书相互转换

    java 生成的有私钥的证书导入IE,或者把IE导出的证书导入java的KeyStore

    keystore转x509pem工具

    在使用signapk工具签名时,是需要 x509.pem + pk8格式的证书,它是一个公私钥分开存放的格式,在电脑上生成的证书一般是以 keystore格式存放的,有时在证书签发机构申请的证书也是 keystore格式的。这时用signapk...

    keystoke证书转换nginx证书工具

    标题提到的"keystoke证书转换nginx证书工具"是一个帮助管理员处理SSL/TLS证书的实用程序,特别针对从Java的`keytool.exe`生成的`.keystore`格式证书进行转换。`keytool`是Java Development Kit (JDK) 自带的一个...

    证书转换生成工具protecle

    3. **格式转换**:例如,Protecle可以帮助我们将P12(PKCS#12)格式的证书转换为BKS(Bouncy Castle Keystore)格式,适用于Android设备。BKS是Android系统推荐使用的密钥库格式。 4. **管理KeyStore**:可以查看和...

    jks证书格式转换nginx使用格式

    由于生成的证书是jks格式,nginx不能直接用,需要要转成PEM格式,这要用到jks2pfx工具进行转换。 jks2pfx的命令格式:JKS2PFX.bat keystore password alias exportname keystore:KeyStore文件绝对路径 password:...

    keystore 证书转*.x509.pem 和*.pk8

    直接运行即可,前提是证书请放在bat文件同目录下

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

    本文将详细介绍如何将PFX格式的证书转换为适用于Tomcat的JKS格式,并完成整个替换过程。 #### 安装Java环境 首先确保计算机上已经安装了Java环境。根据文档描述,建议安装J2SE 1.5版本,可以通过下载并运行`jdk-1_...

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

    除了转换,`keytool`还可以用于查看密钥信息、导入或导出证书、创建新的密钥对等操作。例如,你可以使用`-list`参数查看Keystore中的密钥信息: ```bash keytool -list -v -keystore myapp.keystore ``` 这个过程中...

    SSL中各证书的转换

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

    nginx证书转换jks

    ### Nginx证书转换jks知识点详解 #### 一、背景与目的 在现代Web服务部署中,Nginx作为一款高性能的HTTP和反向代理Web服务器,被广泛应用于多种场景之中,尤其是在需要进行SSL/TLS加密通信时更是不可或缺。然而,...

    转换工具.7z

    keystore转pem则表示将keystore中的公钥证书转换为x509.pem格式,这是一种常见的公钥证书格式,易于阅读和交换。 压缩包内的文件包括: 1. `signapk.jar`:这是一个用于签名APK的工具,由Google官方提供。它需要pk...

    keystore转x509.pem、pk8工具,兼容windows、linux

    它将keystore中的私钥导出为pk8格式,然后使用openssl工具将pk8和公钥证书转换为x509.pem格式。 对于Linux或Unix用户,keystore2pem.sh的工作原理相似,但可能需要先确保openssl工具已经安装。运行脚本时,同样需要...

    证书转换portecle-1.9.zip

    在描述中提到的证书转换,主要包括P12到BKS以及BKS到P12的过程。 首先,我们来了解下这些证书格式: 1. **P12**:也称为PKCS#12,是由RSA Security开发的个人身份信息交换格式,用于存储用户的私钥、公钥和证书。...

    kse-543.dmg keystore-explorer: 5.4.3

    广泛的格式支持KeyStore Explorer支持多种KeyStore,密钥对,私钥和证书格式,并可在它们之间进行转换。请参阅功能,以获取受支持格式的列表。 CA的基本功能KeyStore Explorer可以用于创建自己的CA证书并使用它签名...

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

    本文将深入探讨“数字证书查看、拆分和格式转换工具”这一主题,涉及的关键词包括“SSL”、“keystore”、“crt”和“key”。 首先,让我们了解SSL(Secure Sockets Layer)和它的升级版TLS(Transport Layer ...

    nginx配置https的方法示例(免费证书)

    Windows用户如果拥有以.keystore格式存在的证书,可以通过JKS2PFX转换工具将keystore证书转换成PEM格式的证书。而Linux或OSX系统用户则需要使用openssl工具来生成密钥和证书。 生成服务器密钥和证书申请文件的步骤...

    portecle 证书格式转换

    **SSL证书格式转换详解** 在数字证书领域,SSL(Secure ...通过上述步骤,你可以轻松地将证书转换为适应Android系统的格式,确保应用的网络通信安全。在实际操作中,务必遵循最佳安全实践,确保数据的完整性和保密性。

    导出JVM KeyStore中私钥的Java程序

    Java中的KeyStore是用于存储证书、密钥对和信任证书的重要工具,主要应用于安全通信,如SSL/TLS协议。在Java环境中,keytool是用于管理KeyStore的命令行工具,可以进行证书的创建、导入、导出等操作。本文将详细讲解...

    keystore2pk8.zip|keystore2pk8.zip

    `keystore2pk8.zip`文件包包含了一套工具和指南,用于将Android的`.keystore`签名文件转换为`.pk8`(私钥)和`.x509.pem`(证书)格式。这个过程对于理解Android应用签名机制以及在不同场景下处理签名文件非常有帮助...

    pfx证书安装

    pfx证书安装 ...下面将详细介绍pfx证书安装的步骤和相关知识点。 pfx证书格式 ...需要将pfx格式证书转换为JKS格式证书或PFX格式证书,然后在server.xml文件中添加keystoreFile和keystoreType属性。

Global site tag (gtag.js) - Google Analytics