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

相关文章

来自专栏blog

利用cert-manager让Ingress启用免费的HTTPS证书

cert-manager 是替代 kube-lego 的一个开源项目,用于在 Kubernetes 集群中自动提供 HTTPS 证书,支持 Let’s Encr...

2151
来自专栏数据库新发现

字符集问题的初步探讨(六)-----乱码的产生

http://www.eygle.com/special/NLS_CHARACTER_SET_06.htm

622
来自专栏乐沙弥的世界

MySQL PXC 5.7 invalid user‘@MYSQLD_USER@’

最近的PXC 5.7启动的时候收到一个无效用户的提示,invalid user ‘@MYSQLD_USER@’,这个问题还真是头一次碰到,而且这个MYSQLD_...

893
来自专栏林德熙的博客

WPF 如何调试 binding

如果是写在 xaml 的绑定,很难看到是那里出错 如何做 vs 调试 binding?

451
来自专栏小樱的经验随笔

RSA公钥文件解密密文的原理分析

  最近在学习RSA加解密过程中遇到一个这样的难题:假设已知publickey公钥文件和加密后的密文flag,如何对其密文进行解密,转换成明文~~

481
来自专栏张善友的专栏

SignalR QuickStart

SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话。 换句话说,该对话可不受限制地...

1986
来自专栏北京马哥教育

手把手教你在CentOS上搭建Kubernetes集群

作者:ChamPly 安装CentOS 1.安装net-tools [root@localhost ~]# yum install -y net-tools ...

7225
来自专栏一个爱瞎折腾的程序猿

mvc网站迁移.net core记录

ConfigureServices方法中配置即可,详情见院长文章 http://www.cnblogs.com/dudu/p/5879913.html

601
来自专栏技术小黑屋

效率脚本:删除已经合并的git分支

使用Git管理代码工程,着实方便了很多,但是当做完feature分支或者完成hotfix之后,总是忘记删除这些无用的分支,一个一个地删除着实麻烦,重复手工劳动不...

621
来自专栏JavaEE

spring和springboot中加密连接数据库的信息前言:一、spring中加密连接数据库的信息:二、springboot项目中加密数据库连接信息:总结:

在实际开发中,一些关键的信息肯定是要加密的,否则就太不安全了。比如连接数据库的用户名和密码,一般就需要加密。接下来就看看spring项目和spring boot...

1012

扫码关注云+社区