`
flyPig
  • 浏览: 136993 次
  • 性别: 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证书工具,jdk keytool.exe生成的.keystore格式证书通过他可以转换为.key、.pfx、.crt证书,用于配置https证书

    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转换)

    该文档提供JKS转换为PFX的方法 使用JWSDP工具包中的工具 •安装J2SE 1.5,下载并运行jdk-1_5_0_09-windows-i586-p.exe •下载并安装jave web service develop pack, jwsdp-2_0-windows-i586.exe •创建一个新的...

    kse-543.dmg keystore-explorer: 5.4.3

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

    SSL中各证书的转换

    keytool -import -alias mycert -file d:\def.cer -keystore mykeystore.jks (导入证书到keystore) 2. JKS——&gt;cer格式 keytool -import -alias mycert- keystore mykeystore.jks -file d:\def.cer (从keystore...

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

    本资源是个各种数字证书查看工具,以及各种证书转换工具,将keystore拆成crt和key

    JKS2PFX证书转换工具

    jks2pfx的命令格式:JKS2PFX.bat keystore password alias ...alias:生成证书CSR时,所起的Alias别名 exportname:准备导出的文件名称 (不要带扩展名) JKS2PFX.bat d:\lgy.com.keystore 123456 lgy.com exportfile

    keystore-explorer:KeyStore Explorer是Java命令行实用程序keytool和jarsigner的免费GUI替代品

    在各种KeyStore类型之间创建,加载,保存和转换:JKS,JCEKS,PKCS#12,BKS(V1和V2)和UBER 更改密钥库和密钥库条目密码 删除或重命名KeyStore条目 剪切/复制/粘贴KeyStore条目 将证书附加到密钥对证书链 生成...

    SSL转换工具jks2pfx

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

    回调地址CA证书制作说明1

    1. 如果提供的是.keystore格式:(jks也可以用这种方式转换)首先把证书转换成pkcs12格式keytool -importkeystore -src

    Android签名文件转化为pk8和pem的实现

    Android签名工具 常用的android的签名工具有:jarsigner 和apksigner。jarsigner使用keystore文件,apksigner使用pk8+x509.pem。 什么是.pem和.pk8文件 .pem 在android对apk签名的...1.将keystore文件转换为pkcs12格式

    Android SM2、SM3、SM4 算法支持 Service Provider 及证书制作软件包

    3、bc422.jar -- BouncyCastle 加密库,Android 4.2.2 内置版本(由真机导出dex文件转换而得,仅用于编译时选用,勿打包到apk文件中) 4、testSM.java -- SM2、SM3、SM4 算法相关类引用范例 5、testCERT.java -- X.509...

    jks-js:从Java密钥库中提取PEM证书,以便使用节点js安全地连接到基于Java的服务器

    jks-js是到PEM证书的转换器,以便使用节点js安全地连接到基于Java的服务器。 安装 npm install jks - js 用法 ... const jks = require ( 'jks-js' ) ; const keystore = jks . toPem ( fs . readFileSync ( '...

    KeyTool IUI v2.3

    用于生成,转换,查看JAVA SSL证书的GUI工具。 **** REQUIREMENTS **** JRE (Java Runtime Environment 1.6), or higher

    ssl-networking-java:SSL 和表示层加密

    网络项目里斯·诺塔贾科莫默认情况下,分析师和收藏家将尝试连接到localhost:9998和localhost:9999上的董事和银行##0 - 设置####0.1 生成密钥对: : 生成密钥库(分发给银行和董事) 生成证书将证书转换为信任库...

    ApkIDE——安卓反编译

    同时因为keystore可以自己生成唯一数据,解决使用共享签名证书可能被如360拉黑报马的问题。 修复文件修改的监控问题,确保在必要时(已打开的文件在外部被修改时)通知用户重新加载它们。 修复查找对话框关闭后无法...

    jks2pfx2.rar

    常用证书格式:JKS(.keystore),微软(.pfx),OPSSL之PEM(.key + .crt),其中tomcat使用JKS格式,nginx使用PEM格式。 由于生成的证书是jks格式,nginx不能直接用,需要要转成PEM格式,这要用到jks2pfx工具进行转换。

Global site tag (gtag.js) - Google Analytics