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 条评论
登录 后参与评论

相关文章

来自专栏三流程序员的挣扎

RxJava 创建操作符

内部触发对 Observer 的 onNext 方法的调用,just 中传递的参数将直接在 onNext 方法中接收到,参数的类型要和 Observer 的泛型...

2461
来自专栏C#

DotNet加密方式解析--数字签名

    马上就要过年回村里了,村里没有wifi,没有4G,没有流量,更加重要的是过几天电脑就得卖掉换车票了,得赶紧写几篇文章。 ?     数据安全的相关技术在...

3217
来自专栏androidBlog

Rxjava 2.x 源码系列 - 线程切换 (上)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/de...

4033
来自专栏Java与Android技术栈

RxJava1 升级到 RxJava2 所踩过的坑

RxJava2 发布已经有一段时间了,是对 RxJava 的一次重大的升级,由于我的一个库cv4j使用了 RxJava2 来尝鲜,但是 RxJava2 跟 Rx...

1673
来自专栏WindCoder

进击微信小程序-Java版AES/CBC/PKCS7Padding加解密字符串

进击微信小程序,最初找到腾讯云给的解决方案,无奈后端是node.js,而且才一开始配上去还不能用,之后仔细看readme,摸到它开源的Wafer,本来以为找到终...

4432
来自专栏IT笔记

JAVA版微信小程序用户数据的签名验证和加解密

签名验证和加解密 数据签名校验 为了确保 开放接口 返回用户数据的安全性,微信会对明文数据进行签名。开发者可以根据业务需要对数据包进行签名校验,确保数据的完整性...

6665
来自专栏python3

python hashlib模块

hashlib模块:用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512...

811
来自专栏web开发

JavaScript前端和Java后端的AES加密和解密

在实际开发项目中,有些数据在前后端的传输过程中需要进行加密,那就需要保证前端和后端的加解密需要统一。这里给大家简单演示AES在JavaScript前端和Java...

7556
来自专栏小工匠技术圈

【小工匠聊密码学】--消息摘要--HMAC算法

  HMAC是密钥相关的消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。

1111
来自专栏BaronTalk

RxJava系列六(从微观角度解读RxJava源码)

前言 通过前面五个篇幅的介绍,相信大家对RxJava的基本使用以及操作符应该有了一定的认识。但是知其然还要知其所以然;所以从这一章开始我们聊聊源码,分析RxJ...

4267

扫码关注云+社区

领取腾讯云代金券