java jks 转pfx_JKS、BKS、PFX证书格式之间转换
常用的证书密钥库格式: JKS和JCEKS是Java密钥库(KeyStore)的两种比较常见类型,JKS的Provider是SUN,在每个版本的JDK中都有,JCEKS的Provider是SUNJCE,1.4后我们都能够直接使用它。 JCEKS 在安全级别上要比JKS强,使用的Provider是JCEKS(推荐),尤其在保护KeyStore中的私钥上(使用TripleDES) PFX (PKCS#12)是公钥加密标准,它规定了可包含所有私钥、公钥和证书。其以二进制格式存储,在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(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 enums = inputKeyStore.aliases(); while (enums.hasMoreElements()) { String keyAlias = enums.nextElement(); if (inputKeyStore.isKeyEntry(keyAlias)) { Key key = inputKeyStore.getKey(keyAlias, inPassword); Certificate[] certChain = (Certificate[]) inputKeyStore .getCertificateChain(keyAlias); outputKeyStore.setKeyEntry(keyAlias, key, pfxPassword.toCharArray(), (java.security.cert.Certificate[]) 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格式 * @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 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); java.security.cert.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(); } } } /** * 从BKS格式转换为PKCS12格式 * * * @param jksFilePath * * String JKS格式证书库路径 * @param jksPasswd * * String JKS格式证书库密码 * @param pfxFilePath * * String PKCS12格式证书库保存文件夹 * @param pfxPasswd * * String PKCS12格式证书库密码 */ public void covertBKSToPFX(String jksFilePath, String jksPasswd, String pfxFolderPath, String pfxPasswd) throws Throwable { FileInputStream fis = null; try { KeyStore inputKeyStore = KeyStore.getInstance("BKS", new org.bouncycastle.jce.provider.BouncyCastleProvider()); Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 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 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); java.security.cert.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(); } } } /** * 列出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 e = ks.aliases(); while (e.hasMoreElements()) { String alias = e.nextElement(); java.security.cert.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(); } } /* * 列出BKS库内所有X509证书的属性 * * * @param jksFilePath * 证书库路径 * * @param jksPasswd * 证书库密码 * * @param algName * 库类型 */ public static void listAllCertsBks(String jksFilePath, String jksPasswd, String algName) { try { char[] srcPwd = jksPasswd == null ? null : jksPasswd.toCharArray(); FileInputStream in = new FileInputStream(jksFilePath); KeyStore ks = KeyStore.getInstance(algName, new org.bouncycastle.jce.provider.BouncyCastleProvider()); Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); ks.load(in, srcPwd); Enumeration e = ks.aliases(); while (e.hasMoreElements()) { String alias = e.nextElement(); java.security.cert.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(); } } 原文链接地址: https://www.chinassl.net/faq/n511.html
java jks 转pfx_JKS、BKS、PFX证书格式之间转换相关推荐
- JKS、BKS、PFX证书格式之间转换
常用的证书密钥库格式: JKS和JCEKS是Java密钥库(KeyStore)的两种比较常见类型,JKS的Provider是SUN,在每个版本的JDK中都有,JCEKS的Provider是SUNJC ...
- java jks 转pfx_JKS和PFX文件相互转换方法
JKS(JavaKeysotre)格式和PFX(PKCS12)格式,是最常见的SSL证书格式文件,可以包含完整的证书密钥对,证书链和信任证书信息.PFX常用于Windows IIS服务器,JKS常用语 ...
- 04-HTTPS证书格式及转换
PEM格式的证书文件(*.pem)由Base64编码的二进制内容和开头行(-----BEGIN CERTIFICATE-----).结束行(-----END CERTIFICATE-----)组成,支 ...
- 如何在 Unix 和 DOS 格式之间转换文本文件
本文介绍如何在 Unix 和 DOS 格式之间转换文本文件.DOS 文本文件带有回车符( \r )和换行符( \n )作为它们的换行符,而 Unix 文本文件只有( \n )换行符作为换行符. 有多种 ...
- xBIM 格式之间转换
目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...
- PKI常见证书格式和转换
PKCS PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准. What is PK ...
- cdr存成html格式的文件格式,CDR必备!CDR保存与各种格式之间转换!-cdr文件用什么打开...
cdr功能毋庸置疑的强悍.只要发挥得当工资与地位自然是会让你得到你想要的.但在新手操作的时候总会出现这些或者那些一些问题,下面咱们就来总结一下cdr的打开方式与各种格式之间的转换吧! 一.cdr文件打 ...
- Cer Crt Pem Pfx 证书格式转换
1.从pfx格式的证书提取出密钥和证书 set OPENSSL_CONF=openssl.cnf openssl pkcs12 -in my.pfx -nodes -out server.pem op ...
- java 图片不失真缩放,ico格式图片转换,透明图层,jar->exe
Java 图片缩放,转ico格式 Java 在转换图片格式为 ico 时 需要引入 image4j 的依赖,这里分享一个自己写好的并通过exe4j 打包好的exe小程序.因为功能太少所以再引入 thu ...
- java 使用XmlPullParser解析Excel2007中日期格式的转换
Excel2007在日期格式上是以double类型存储的,例如日期为2018-06-13,在xml中表示为43264. 使用java解析excel的xml文件时,会发现,获取到的值依旧是43264,毕 ...
最新文章
- 《几何与代数导引》习题1.35.4
- matlab 多项式拟合 ployval
- vue-quill-editor上传内容由于图片是base64的导致字符太长的问题解决
- automation服务器不能创建对象的问题
- ASP.NET 页面事件执行顺序 收藏
- jaxb int convert to integer
- 老旧小区安防升级改造有机遇也有难度
- java winform程序_重拾JAVA之WinForm实战之(四)
- NLP 学习笔记9-停用词
- mtk刷机显示连接服务器失败,MTK刷机常见错误分析 报错代码解释3
- 远程办公软件:TeamViewer使用评测与安装
- 【Python-神经网络】
- 区块链学习系列:对称与非对称加密区别?
- 基于android7.1+msm8937充电学习---概述(1)
- 设计模式——简单工厂模式之女娲造人
- python字典改键_python 字典修改键(key)的几种方法
- SSD-6D: Making RGB-Based 3D Detection and 6D Pose Estimation Great Again—2017(笔记)
- 【程序员入门记录】ThinkPad E470改造记录——系统改造
- 学黑客要学什么编程语言
- 地图商户采集工具如何使用
热门文章
- 程序员需要建立的对技术、业务、行业、管理、投资的认知
- 在编译命令行中添加 /D_SCL_SECURE_NO_DEPRECATE
- PS背后的神秘AI力量 是Adobe憋了十年的神功
- 计算机内存加速,电脑内存使用率过高怎么加速
- (翻译)简化模式(Reduce)
- fanuc机器人自动程序前怎么回原点_FANUC机器人宏程序自动运行的方法及启动宏程序的步骤教程...
- activiti之奇淫技巧一(自动完成首个任务)
- 618值得囤的好书清单
- java jstl 配置_jstl的tld配置
- html飞机大战游戏实验报告,飞机大战实验报告.docx