Java生成SM2证书基于BouncyCastle(cer)

Java生成SM2证书基于BouncyCastle(cer)

可以先加QQ 783021975 咨询相关问题。代码后续会更新一部分

整理中。完全是Java代码调用BouncCastle生成的哦。先来个图看下 签名算法  和  公钥参数都是 符合SM2算法的

可以先加QQ 783021975 咨询相关问题。

2017年8月17日10:37:14 增加生成cer证书代码

       /**
     * 国密证书签名算法标识
     */
    private static String  SignAlgor = "1.2.156.10197.1.501";
        /**
	 * 生成国密ROOT证书方法
	 * @param pageCert.getCn()+","+
	 * @throws Exception
	 */
	public static void genSM2CertByRoot() throws Exception {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		org.bouncycastle.jce.provider.BouncyCastleProvider bouncyCastleProvider = new org.bouncycastle.jce.provider.BouncyCastleProvider();
		Security.addProvider(bouncyCastleProvider);
		//证书的名称
                String fileName = "root"+new Date().getTime()/1000;
		String path  = "保存的路径";
		String rootCertPath = path+fileName+".cer";
		try {
			KeyPair kp = KeyGenUtil.getKeyPair2SM2(path,fileName);//这块就是生成SM2公私钥对  https://zb.oschina.net/service/70e3fdaf699a724b
			System.out.println("=====公钥算法====="+kp.getPublic().getAlgorithm());
			BCECPrivateKey bcecPrivateKey = (BCECPrivateKey) kp.getPrivate();//使用ECPrivateKey  PrivateKey都可以
			BCECPublicKey bcecPublicKey = (BCECPublicKey) kp.getPublic();//使用ECPublicKey  PublicKey都可以
			//申请服务器证书信息  我是通过网页得到传递的参数 。如果测试 写死即可。这一步没有什么的。
			X500Principal principal = new X500Principal("CN=小帅丶博客,O=小帅丶博客");
			//X500Principal principal = new X500Principal("CN="+pageCert.getCn()+",O="+pageCert.getO());
			X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();
			certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));
			certGen.setIssuerDN(principal);certGen.setNotBefore(new Date());
			certGen.setNotAfter(CertAuthAssist.getYearLater(5));
			certGen.setSubjectDN(principal);
			certGen.setSignatureAlgorithm(SignAlgor);
			certGen.setPublicKey(bcecPublicKey);
			X509Certificate rootCert = certGen.generateX509Certificate(bcecPrivateKey, "BC");
			FileOutputStream outputStream = new FileOutputStream(rootCertPath);
			outputStream.write(rootCert.getEncoded());outputStream.close();
			} catch (Exception e) {
				logger.info("======根证书申请失败"+e.getMessage());return null;
		}
}

https://zb.oschina.net/service/70e3fdaf699a724b 购买链接。自愿购买

CertAuthAssist.getYearLater()方法:

/**
	 * 计算当前时间的N年后
	 * @param later 正整数
	 * @return
	 */
	public static Date getYearLater(int later) {
		Date date = new Date();
		try {
			Calendar calendar = Calendar.getInstance();
			calendar.add(Calendar.YEAR,later);
			date = calendar.getTime();
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		return date;
	}

本项目支持   1.生成RSA算法cer证书 2.SM2算法cer证书。 3.生成根证书。子证书。三级证书 4.字符串公私钥转 公私钥对象 支持SM2算法

需要用到的BC包

    <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on -->  
             <dependency>  
                <groupId>org.bouncycastle</groupId>  
                <artifactId>bcpkix-jdk15on</artifactId>  
                <version>1.57</version>  
            </dependency>   
            <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcmail-jdk16 -->  
            <dependency>  
                <groupId>org.bouncycastle</groupId>  
                <artifactId>bcmail-jdk15on</artifactId>  
                <version>1.56</version>  
            </dependency>  

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java3y

纳税服务系统四(角色模块)【角色与权限、角色与用户】

需求分析 我们直接来看看原型图,看看需求是怎么样的: ? 这里写图片描述 ? 这里写图片描述 我们看到上图,就会发现角色模块主要还是CRUD,唯一不同的就是它不...

4168
来自专栏Java成神之路

Java企业微信开发_07_JSSDK多图上传

 所有的JS接口只能在企业微信应用的可信域名下调用(包括子域名),可在企业微信的管理后台“我的应用”里设置应用可信域名。这个域名必须要通过ICP备案,不然jss...

542
来自专栏前端架构

angularjs中promise的使用

我们知道JavaScript语言的执行环境是“单线程”,所谓单线程,就是一次只能够执行一个任务,如果有多个任务的话就要排队,前面一个任务完成后才可以继续下一个任...

681
来自专栏hrscy

Alamofire 上传图片入门教程(下)

在 ViewController 的 extension 里面,uploadImage(_:progress:completion:) 的下面添加如下的代码:

682
来自专栏大内老A

通过扩展让ASP.NET Web API支持JSONP

同源策略(Same Origin Policy)的存在导致了“源”自A的脚本只能操作“同源”页面的DOM,“跨源”操作来源于B的页面将会被拒绝。同源策略以及跨域...

1687
来自专栏刘笑江的专栏

iOS 私有 API 调用检测机制探讨

最近发现部分 App 以字符串拼接的方法调用私有 API,在提交 AppStore 审核后被发现打回修改的案例。

2054
来自专栏JackieZheng

照虎画猫写自己的Spring

从细节跳出来 看了部分Spring的代码,前面用了四篇内容写了一些读书笔记。 回想起来,论复杂度,Spring够喝上好几壶的。他就像一颗枝繁叶茂的大树,远处看...

1856
来自专栏全华班

java招聘面试

过完年了,好多学习JAVA的同学在忙着找工作,大家先预习下这些基础知识 ,说不定能面试的时候考到。 基础篇 1 什么是Java、Java2、JDK?JDK后面...

3455
来自专栏滕先生的博客

iOS 通讯录相关序一、介绍二、弹出系统通讯录程序三、代理方法四、不需要弹出联系人控制器就可以获取联系人信息的方法五、iOS 9 新出的点击通讯录的获取信息的办法

2686
来自专栏阿杜的世界

Java Web技术经验总结(十七)

522

扫描关注云+社区