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

相关文章

来自专栏小工匠技术圈

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

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

771
来自专栏FreeBuf

非对称算法之RSA的签名剖析

数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。 不清楚的请自行科普数字签名。本...

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

RxJava 连接操作符

看注释意思是将所有数据按原来的顺序缓存起来,就是不知道观察者什么时候订阅,什么时候解除订阅,所以缓存起来,以后直接用。

1902
来自专栏C#

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

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

3027
来自专栏WindCoder

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

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

1662
来自专栏Java与Android技术栈

Cold Observable 和 Hot Observable

Hot Observable 无论有没有 Subscriber 订阅,事件始终都会发生。当 Hot Observable 有多个订阅者时,Hot Observa...

1472
来自专栏androidBlog

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

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

2483
来自专栏IT笔记

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

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

5735
来自专栏python3

python hashlib模块

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

721
来自专栏杨逸轩 ' sBlog

Java实现微信跳一跳抓包修改分数

3456

扫码关注云+社区