上一篇文章讲到了 Java 生成数字证书,使用的是第三方的组件 BC 。这篇文章也是介绍生成数字证书的,只不过与上一篇不同的是,这篇采用的是 KeyStore 的存储方式,导出的证书文件格式为 pfx ,这种格式的证书不仅包含有公钥,还包含有私钥。从证书中就可以读取到私钥。

正文

废话不多说,直接上内容。
与上一篇相同,这里也是使用的 Bouncy Castle 提供的组件,不同的是,这里的证书采用的是公钥加密技术12号标准生成的,简写 PKCS12 。具体内容这里就不再详细的介绍了,有需要的童鞋们直接 Google 就行了。下面直接上代码。
PKCS12Test (测试证书类)
<span style="font-family:Comic Sans MS;font-size:12px;">package com.cacss.jsceu.core;import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.x509.X509V3CertificateGenerator;import javax.security.auth.x500.X500Principal;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.security.*;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Date;/*** Created With IntelliJ IDEA.** @author : lee* @group : sic-ca* @Date : 2014/12/30* @Comments : 测试证书类* @Version : 1.0.0*/
public class PKCS12Test {static {// 系统添加BC加密算法 以后系统中调用的算法都是BC的算法Security.addProvider(new BouncyCastleProvider());}public static void main(String args[]) throws NoSuchAlgorithmException,InvalidKeyException, SecurityException, SignatureException,KeyStoreException, CertificateException, IOException {String certPath = "d:/jason.pfx";// 创建KeyStoreKeyStore store = KeyStore.getInstance("PKCS12");store.load(null, null);/* RSA算法产生公钥和私钥 */KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");kpg.initialize(2048);KeyPair keyPair = kpg.generateKeyPair();// 组装证书String issuer = "C=CN,ST=BJ,L=BJ,O=SICCA,OU=SC,CN=SICCA";String subject = issuer;X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));certGen.setIssuerDN(new X500Principal(issuer));certGen.setNotBefore(new Date(System.currentTimeMillis() - 50000));certGen.setNotAfter(new Date(System.currentTimeMillis() + 50000));certGen.setSubjectDN(new X500Principal(subject));certGen.setPublicKey(keyPair.getPublic());certGen.setSignatureAlgorithm("SHA256WithRSAEncryption");X509Certificate cert = certGen.generateX509Certificate(keyPair.getPrivate());System.out.println(cert.toString());//System.out.println(keyPair.getPrivate());//store.setCertificateEntry(alias, cert);store.setKeyEntry("atlas", keyPair.getPrivate(),   "atlas".toCharArray(), new Certificate[] { cert });FileOutputStream fout =new FileOutputStream(certPath);store.store(fout, "atlas".toCharArray());       fout.close();  }/*** 得到key store* * @return* @throws Exception*/private KeyStore getKeyStore() throws Exception {KeyStore store = KeyStore.getInstance("PKCS12");store.load(null, null);return store;}
}</span>

效果图

下面是生成的证书,以及导出为 pfx 格式的证书。
<span style="font-family:Microsoft YaHei;font-size:12px;">Version: 3SerialNumber: 1420002634985IssuerDN: CN=SICCA,OU=SC,O=SICCA,L=BJ,ST=BJ,C=CNStart Date: Wed Dec 31 13:09:45 CST 2014Final Date: Wed Dec 31 13:11:25 CST 2014SubjectDN: CN=SICCA,OU=SC,O=SICCA,L=BJ,ST=BJ,C=CNPublic Key: RSA Public Keymodulus: bafbed3edf15d483b8392c7f71af4b4921af7e251ab6a34c316686dafc1d658babcd549bc0dd1324448bfcf6e604f1860d3661ad19e172e37703540c1967a4cce969eb6b9890de67a9c830b873a88f51200a4262ae2b5ff54b1dc4c377a26ab3aa7af6dc7525ffc88fd839b0feaa3d761cba036bfdb93c98f9d41e975f5ed2339075b7abaa9bb262d60ce93d424568c9a3f417a4d7da20092e144fd1f62ac9e1f3d40a3179b84f19763bbb49a945e896c4f5e3d5f30bf8b456b42279d381a1568b0eb7a653e932eda9e16218318e51985e5a53685600a15e6e256092692209909641a0eae99054ea56f53e0a3d6eef0cb2ee261363e056f0a26725b4043189c9
public exponent: 10001Signature Algorithm: SHA256WITHRSASignature: 3302cf3493d1b8beb1a1400081ff4b5d2a995cdcfff2f26401d7e8cb90e042edfabcb29e2fe5d70ea2ad288475e43d275787e2481c4da60302e2ebc7f897bbd0f6019c6b557678d84044607b9b9d8bd5f22e1dc75deae1bf17a393b75c8bf5bafda05b86ec9fa180af896d994c9765d02d3bd4426ce5036c6bd90b5c2a1ca5789a6af1599a7bbade68f85dc3e99bdf3f6893d8c22e0d72995a323c54b9f25b81ae6dfc6f9363b7b7b428fb490dec6b734ede7dbecc7720e7c6429e4427beb989dcf00b4ef74fb01f945120555a4b6f3f7d709aaa41f9a689f8719b6dd617f2d96b9b27f7ae346883b6d5b1d33d3c7302b6b83b89d57324a455517443296e135a</span>

结束语

如果只看证书文件的话,是没有什么区别的,只不过嘛,在 windows 下这两种证书的打开方式是不一样的,大家可以自己去体会一下。
值得指出的一点是,使用密钥库的方式存储证书,是一个很不错的方案,当然,如果涉及到安全的问题,可以对密钥库进行加密,在写入证书的时候,设置一种比较安全的加密方式,生成的证书就会有访问限制,需要提供访问密码。没有密码的人是访问不了的。当然,我提供的这个例子中是没有经过加密存储的。有这方面需求的童鞋,可以看一下 Java api 中的相关介绍。
最后,提前祝大家新年快乐,By the way,现在已经是 2014 年的最后一天了。

Java 生成数字证书系列(四)生成数字证书(续)相关推荐

  1. java面试常考系列四

    转载自 java面试常考系列四 题目一 大O符号(big-O notation)的作用是什么?有哪些使用方法? 大O符号描述了当数据结构里面的元素增加的时候,算法的规模或者是性能在最坏的场景下有多么好 ...

  2. SAP HANA SQL系列四:数字函数

    数字函数 数字函数 ABS ACOS ASIN ATAN ATAN2 BINTOHEX BITAND CEIL COS COSH COT EXP FLOOR GREATEST HEXTOBIN LEA ...

  3. Go语言 和 Java语言对比理解系列四:门闩(WaitGroup/CountDownLatch)

    文章目录 Java中的门闩最基础的实现方式就是CountDownLatch,可以参考之前的文章<使用三个线程,按顺序打印X,Y,Z,连续打印10次>: 而Go中可以通过sync.WaitG ...

  4. python(四个数字能生成多少个互不相同且无重复数字的三位数,实现命令行提示符)

    四个数字能生成多少个互不相同且无重复数字的三位数: """ 有1,2,3,4四个数字 求这四个数字能生成多少个互不相同且无重复数字的三位数 ""&qu ...

  5. python基础—for循环练习(给定四个数字组成互不相同的三位数个数)

    1.for循环使用方法 for 变量 in range(10):循环需要执行的代码 练习: 有1,2,3,4四个数字 求这四个数字能生成多少个互不相同且无重复数字的三位数 代码如下: num = (1 ...

  6. 数字图像处理第四章——图像复原(下)

    数字图像处理第四章 数字图像处理---图像复原 (三)仅有噪声的复原--空间滤波 3.1 空间噪声滤波器 3.2 自适应空间滤波 (四)退化函数建模 (五)维纳滤波 (六)约束的最小二乘法(规则化)滤 ...

  7. java p12 ssl_OpenSSL 1.0.0生成p12、jks、crt等格式SSL数字证书的全过程合集

    在这里跟万维景盛的开发者伙伴们分享OpenSSL 1.0.0生成p12.jks.crt等格式SSL数字证书的全过程合集,此生成的证书可用于浏览器.java.tomcat.c++等.步骤如下: 1.创建 ...

  8. Java黑皮书课后题第4章:*4.25(生成车牌号码)假设一个车牌号码由三个大写字母和后面的四个数字组成。编写一个程序,生成一个车牌号码

    *4.25(生成车牌号码)假设一个车牌号码由三个大写字母和后面的四个数字组成.编写一个程序,生成一个车牌号码 题目 题目概述 破题 代码 题目 题目概述 *4.25(生成车牌号码)假设一个车牌号码由三 ...

  9. 数字证书应用综合揭秘(包括证书生成、加密、解密、签名、验签)

    引言 数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件.为现实网络安全化标准如今大部分的 B2B.B2C.P2P.O2O 等商业网站含有重要企业资料个人资料的信息资信网站 ...

  10. 签名算法sha256withrsa,RSA数字证书公钥私钥生成,base64转码和文件日志

    RSA数字证书公钥密钥生成: 在Linux系统下运行以下命令生成: 如果提示输出密码,可以为空,直接回车 生成的公钥rsa_public_key.pem和密钥rsa_private_key.pem文件 ...

最新文章

  1. Ant Design Pro 跳转路由 传参数,接收参数
  2. java 序列化 clone_利用java序列化进行对象深Clone
  3. 用位组函数来计算每个月中用户访问网页的天数。
  4. js-for (var in )遍历顺序乱了
  5. JAVA图书管理系统(JDBC,MySQL)
  6. HTML5 — 知识总结篇《VIII》【媒体元素】
  7. 反射异常 java.lang.InstantiationException处理
  8. 多传感器融合理论及其应用——1
  9. X264源码下载地址
  10. 【程序员小助手】Emacs,最强编辑器,没有之一
  11. android开发实例学习笔记之简易相册的实现
  12. NutUI-Bingo 的使用
  13. 普罗米修斯监控mysql与邮件告警
  14. 学完python可以从事哪些工作?
  15. 大学计算机基础实验实施,大学计算机基础实验实施的方案学生用.docx
  16. Docker-compose 启动报错:Pool overlaps with other one on this address space
  17. win10下的linux占用大小,详解Win10系统上使用Linux之前要知道的几件事
  18. java毕业设计葡萄酒销售管理系统mybatis+源码+调试部署+系统+数据库+lw
  19. 单位办公电脑声音和摄像头被关闭,如何打开笔记本麦克风和摄像头。
  20. #1082 : 然而沼跃鱼早就看穿了一切

热门文章

  1. Python笔记03:python中用import导入包的机制原理是什么?
  2. Ubuntu下的“千千静听”-Audacious
  3. 隐私浏览器DuckDuckGo爆出漏洞,可导致URL欺骗攻击
  4. 给设计团队管理者的6个建议
  5. 计算机物理安全策略,关于计算机信息安全策略的维度思考研究
  6. nuc10fnh寒霜峡谷linux,英特尔(Intel)寒霜峡谷NUC10i5FNH使用体验
  7. 闪存驱动器_什么是闪存驱动器?
  8. 中国车联网行业市场现状分析及投资趋势预测报告2022-2028年
  9. 数学规划求解器lp_solve超详细教程
  10. Servlet-JSP-课堂笔记