java usbkey数字证书_Java创建数字证书

BouncyCastle下载:

链接:http://pan.baidu.com/s/1vrcL4    密码:6i27

package com.what21.security05;

import java.io.InputStream;

import java.io.OutputStream;

import java.math.BigInteger;

import java.security.Key;

import java.security.KeyPair;

import java.security.KeyPairGenerator;

import java.security.KeyStore;

import java.security.PrivateKey;

import java.security.PublicKey;

import java.security.Security;

import java.security.cert.Certificate;

import java.security.cert.X509Certificate;

import java.security.interfaces.RSAPrivateKey;

import java.security.interfaces.RSAPublicKey;

import java.util.Calendar;

import java.util.Date;

import org.bouncycastle.asn1.x509.BasicConstraints;

import org.bouncycastle.asn1.x509.ExtendedKeyUsage;

import org.bouncycastle.asn1.x509.KeyPurposeId;

import org.bouncycastle.asn1.x509.KeyUsage;

import org.bouncycastle.asn1.x509.X509Extensions;

import org.bouncycastle.asn1.x509.X509Name;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

import org.bouncycastle.x509.X509V3CertificateGenerator;

import org.bouncycastle.x509.extension.AuthorityKeyIdentifierStructure;

import org.bouncycastle.x509.extension.SubjectKeyIdentifierStructure;

public final class CreateCert {

/**

* 生成秘钥对

*

* @param type

* @param keyLen

* @return

* @throws Exception

*/

public static KeyPair makeKeyPair(String type,int keyLen) throws Exception {

Security.addProvider(new BouncyCastleProvider());

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(type);

keyPairGenerator.initialize(keyLen);

KeyPair keyPair = keyPairGenerator.generateKeyPair();

return keyPair;

}

/**

* 制作X509证书

*

* @param publicKey 公钥

* @param privateKey 私钥

* @param issuerDN 发行者

* @param subjectDN 主题

* @param year 年限 eg : 10

* @param algorithm 算法 eg : MD5WithRSA

* @return

* @throws Exception

*/

public static X509Certificate makeCertificate(PublicKey publicKey, PrivateKey privateKey,

String issuerDN,String subjectDN, int year,String algorithm) throws Exception {

X509V3CertificateGenerator certGenerator = new X509V3CertificateGenerator();

certGenerator.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));

X509Name issuerDNName = new X509Name(issuerDN);

certGenerator.setIssuerDN(issuerDNName);

X509Name subjectDNName = new X509Name(subjectDN);

certGenerator.setSubjectDN(subjectDNName);

certGenerator.setPublicKey(publicKey);

certGenerator.setNotBefore(new Date());

int daysTillExpiry = year * 365;

Calendar expiry = Calendar.getInstance();

expiry.add(Calendar.DAY_OF_YEAR, daysTillExpiry);

certGenerator.setNotAfter(expiry.getTime());

certGenerator.setSignatureAlgorithm(algorithm);

return certGenerator.generate(privateKey);

}

/**

* 生成 KeyStore

*

* @param keyLen

* @param alias

* @param storePasswd

* @param trustPasswd

* @param fullDN

* @param output

* @throws Exception

*/

public static void generateKeyStore(int keyLen,String alias, String storePasswd,

String trustPasswd,String fullDN, OutputStream output)throws Exception {

//==============================================================================//

KeyPair rsaKeyPair = makeKeyPair("RSA",keyLen);

RSAPublicKey rsaPublicKey = (RSAPublicKey) rsaKeyPair.getPublic();

RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) rsaKeyPair.getPrivate();

//==============================================================================//

X509Certificate certificate = makeCertificate(rsaPublicKey,rsaPrivateKey, fullDN, fullDN, 10, "MD5WithRSA");

X509Certificate[] certificateChain = { certificate };

//==============================================================================//

char[] storeCPW = storePasswd.toCharArray();

char[] trustCPW = trustPasswd.toCharArray();

KeyStore keyStore = KeyStore.getInstance("JKS");

keyStore.load(null);

keyStore.setKeyEntry(alias, rsaPrivateKey, trustCPW, certificateChain);

keyStore.store(output, storeCPW);

}

/**

* @param type JKS、PKCS12...

* @param input

* @param storePasswd

* @param alias

* @param trustPasswd

* @return

* @throws Exception

*/

public static Object[] getCertAllInfo(String type,InputStream input,String storePasswd,

String alias,String trustPasswd)throws Exception {

Object[] objs = new Object[3];

char[] storeCPW = storePasswd.toCharArray();

char[] trustCPW = trustPasswd.toCharArray();

KeyStore keyStore = KeyStore.getInstance(type);

keyStore.load(input, storeCPW);

Key key = keyStore.getKey(alias, trustCPW);

if (key instanceof PrivateKey) {

Certificate cert = keyStore.getCertificate(alias);

PublicKey publicKey = cert.getPublicKey();

objs[0] = keyStore;

objs[1] = cert;

objs[2] = new KeyPair(publicKey, (PrivateKey) key);

}

return objs;

}

/**

* @param type

* @param input

* @param storePasswd

* @param alias

* @param trustPasswd

* @param keyLen2

* @param alias2

* @param storePasswd2

* @param trustPasswd2

* @param fullDN2

* @param output2

* @throws Exception

*/

public static void makeCertChain(String type,InputStream input,String storePasswd,

String alias,String trustPasswd,int keyLen2,String alias2, String storePasswd2,

String trustPasswd2,String fullDN2, OutputStream output2)throws Exception{

// 签名证书信息

Object[] objs = getCertAllInfo(type,input,storePasswd,alias,trustPasswd);

X509Certificate masterCert = (X509Certificate)objs[1];

KeyPair masterKeyPair = (KeyPair)objs[2];

masterCert.checkValidity();

//==============================================================================//

KeyPair rsaKeyPair = makeKeyPair("RSA",keyLen2);

RSAPublicKey rsaPublicKey = (RSAPublicKey) rsaKeyPair.getPublic();

RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) rsaKeyPair.getPrivate();

//==============================================================================//

X509Certificate certificate = makeCertificate(rsaPublicKey,rsaPrivateKey, fullDN2, fullDN2, 10, "MD5WithRSA");

certificate.checkValidity();

//==============================================================================//

X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();

certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));

certGen.setIssuerDN(masterCert.getSubjectX500Principal());

certGen.setNotBefore(new Date(System.currentTimeMillis()));

certGen.setNotAfter(new Date(System.currentTimeMillis() + 10000));

certGen.setSubjectDN(certificate.getSubjectX500Principal());

certGen.setPublicKey(rsaPublicKey);

certGen.setSignatureAlgorithm("SHA256WithRSAEncryption");

certGen.addExtension(X509Extensions.AuthorityKeyIdentifier, false, new AuthorityKeyIdentifierStructure(masterCert));

certGen.addExtension(X509Extensions.SubjectKeyIdentifier, false, new SubjectKeyIdentifierStructure(rsaPublicKey));

certGen.addExtension(X509Extensions.BasicConstraints, true, new BasicConstraints(false));

certGen.addExtension(X509Extensions.KeyUsage, true, new KeyUsage( KeyUsage.digitalSignature | KeyUsage.keyEncipherment));

certGen.addExtension(X509Extensions.ExtendedKeyUsage, true, new ExtendedKeyUsage(KeyPurposeId.id_kp_serverAuth));

certificate = certGen.generate(rsaPrivateKey);

//==============================================================================//

X509Certificate[] certificateChain = { masterCert,certificate };

//==============================================================================//

Security.addProvider(new BouncyCastleProvider());

char[] storeCPW = storePasswd2.toCharArray();

char[] trustCPW = trustPasswd2.toCharArray();

KeyStore outStore = KeyStore.getInstance("JKS");

outStore.load(null, null);

outStore.setKeyEntry(alias2, masterKeyPair.getPrivate(), trustCPW, certificateChain);

outStore.store(output2, storeCPW);

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

modbus调试时间超时_Java调试器和超时

modbus调试时间超时在代码中存在超时的情况下如何使用调试器。 我的调试器王国! 因此,您一直忙于编写一个项目,一切顺利,直到出现错误为止。 您可以进入开发人员的工具箱,然后拔出调试器。 很棒–您可以设置断点&…

64位微处理器_MCU芯片市场研究:主导8位MCU,但32位MCU受欧美和日本高度垄断

↑ 点击上方 “ 财经热闻解析 ” 关注我们从古老的用电子管堆出来的成吨的逻辑门到现在的超级数据中心,电子技术的发展走过了一代又一代,自然而然,各种芯片也在百花齐放。到了今天,芯片早已成了一个大家族。这么多芯片&#xff0c…

java web容器原理_javaWeb工作原理

http:无状态协议,客户端和服务器之间不需要建立持久的连接,通信完就断开。http的工作流程:1.客户端和服务器建立连接2.客户端发送请求3.服务器响应内容4.服务器关闭连接,客户端解析服务器发送回来的内容http请求&#…

支持Java 8

尽管Java到目前为止已经发布了版本13,但是有许多生产安装都与Java 8一起运行。作为专家,即使是最近几天,我也多次开发Java 8代码,我必须为这不是Java 6而感到高兴。另一方面,作为开放源代码开发人员,我可以…

mooc作业怎么上传附件_怎么以最低价格入门hifi音响?

方案一:音源 用电脑某宝一个 DIY的DAC 大概200-300元某宝一个迷你的DIY前级功放 大概200-300元某宝一个后级小甲类功放 1969小甲 大概600-1500音箱 5寸或者6寸书架箱 品牌的可以考虑 q牌 2000左右 或者某宝DIY组装的惠威 惠威m1 也是20…

java把一段英文拆成单词_java编程题,输入一段英文文章,单词之间都已经用空格分隔,本人想以每5个单词为一行输出,怎么写?请指教...

我的问题是不会输出5个单词为一行.求指导!!我的代码是以下:importjava.io.*;importjava.util.*;publicclassTest2{publicstaticvoidmain(String[]args)throwsIOException{InputStreamR...我的问题是不会输出5个单词为一行.求指导!! 我的代码是以下:import java.io.* ;import ja…

jsp标签 判断 余数_舟山铝箔纸不干胶标签制作-雷宝实业

卷筒纸不干胶印刷时,纸张的走向与一般印刷方法不同,它是以轴向跳格移动实现套印的,即在印版滚筒上同时装上几套印版,当不干胶在压印平台上每跳移一次,印版滚筒水平方向作往复旋转一次,就可实现印刷一个颜色…

java input是什么意思_java中的【...】表示什么意思

...表示可变长参数,就是说这个位置可以传入任意个该类型参数,简单来说就是个数组。(视频教程推荐:java课程)代码示例:1. testPoints(7);2. testPoints(7,9,11);3. testPoints(new Integer[]{7,9,11});1. public static void testP…

jstat –分析

jstat是一个简单的实用工具,在JDK中存在,用于提供与JVM性能相关的统计信息,例如垃圾收集,编译活动。 jstat的主要优势在于,它可以在运行JVM且无需任何先决条件的情况下动态捕获这些指标。 这是什么意思? 例…

微软电脑适合什么人用_#微软surface pro使用心得# 大学生挑电脑参考/平板与电脑二合一到底买的是什么...

surface pro6 使用一年体验。可以作为如果要买pro7 的一个参考。(全是我个人的使用体验与心得,非科普与专业,问我专业的问了我也不知道怎么回答)(pro7更加具体的可以去B站看大佬们的开箱)以下是我的个人想法…

linux 运行java jar_linux运行jar包、查看jar包进程、停止jar包

要运行java的项目需要先将项目打包成war包或者jar包,打包成war包需要将war包部署到tomcat服务器上才能运行。而打包成jar包可以直接使用java命令执行。在linux系统中运行jar包主要有以下四种方式。一、java -jar XXX.jar这是最基本的jar包执行方式,但是当…

et超排真正免狗能用版 真正好用的东西_真正合格小户型,收纳都特别能“装”...

原标题:真正合格小户型,收纳都特别能“装”说起来,小户型的生活在近些年来才流行起来,毕竟,房价的日益升高,想在城市有个家的青年们,只能选择小户型。其实,房子虽小,收纳…

java读取文件并显示_JAVA读取本地文件并显示到页面中

javaweb图片的显示RequestMapping(value"showImg")ResponseBodypublic void ShowImg(HttpServletRequest request,HttpServletResponse response) throws IOException{//String imgFile request.getParameter("imgFile"); //文件名// String path UrlUtil…

javafx html5_JavaFX技巧5:可观察

javafx html5即使在整个NSA监视的这段时间,实现JavaFX控件时也要牢记可观察性,这仍然是一个好主意。 与Swing相比,这在JavaFX中很容易实现。 旧时光 来自Swing,我习惯于花费大量精力和时间来使自定义控件变得可观察。 通常需要添…

苹果电脑怎么投屏到电视_tcl电视怎么投屏

除了看电视,现在的智能电视产品还支持手机投屏功能,如果在使用TCL电视,可以借助第三方软件实现手机投屏的功能,下面就为大家介绍一下,tcl电视怎么投屏。tcl电视怎么投屏步骤1、打开电视自带的应用商店。步骤2、搜索LBT…

重复码

介绍 在我们的Java应用程序中复制/粘贴代码通常不好,但是有时这是不可避免的。 例如,项目License3j在Feature类中为其支持的每种XXX类型提供了一个isXXX方法。 在这种情况下,我们要做的就是写 public boolean isBinary() { return type Type…

sap tcode 功能对照表_Python for Ev3练习amp;Minstorms对照表02

大家好。我是欧文今天给大家分享python for Ev3的练习代码以及python中对应的Ev3Minstorms软件模块对照表。这个练习题都相对基础。主要是用来练习用的。给大家分享的代码也是比较简单的,不过实现方法都是不唯一的。主要的目的是练习和学习。练习代码如下&#xff1…

大楼通信综合布线系统_某办公大楼综合布线系统设计实例,小白可以借鉴一下,大神请绕路...

xxx办公大楼综合布线系统是一个包括内部数据语音通信、外线电话线路接入管理系统、办公用强电电气配电系统、电缆电视系统等内部的复合布线系统,在会议室还有一个小型的供音响系统设备使用的专用布线系统。各子系统的基本情况及主功能如下:强电配电系统&…

java8日期_Java8日期与时间

我们知道Java8一个比较大的改动就是引入了新的表示日期和时间的API,还是很有必要抽点时间了解一下基本的用法。Java8之前的问题在讨论Java8的API之前,我们先看看原来API的问题。我们知道Java8之前只有java.util.Date和java.util.Calendar来表示和处理时间…

javaone_为JavaOne 2014做好准备!

javaone保持那个想法! 是的,我希望我能在Java One 2014上做演讲-但我现在只值得在梦里做到这一点! 但是,没有什么阻止我遵循Java One并跟踪有关我最喜欢的主题的会话/对话。 我希望Oracle能够像我们2013年版那样,像我…