【SM2证书】利用BC的X509v3CertificateBuilder组装X509国密证书

2024-05-19 02:08

本文主要是介绍【SM2证书】利用BC的X509v3CertificateBuilder组装X509国密证书,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SM2、SM4加解密 SM2 SM3 签名验签代码部分开源在gitee&github

https://github.com/xiaoshuaishuai319/algorithmNation

 

证书文件 链接: https://pan.baidu.com/s/1ijHNnMQJj7jzW-jXEVd6Gg 密码: vfva

所需jar包

<!-- 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>

部分代码(基本包含了全部)

	/*** 生成国密ROOT证书方法 X509v3CertificateBuilder* @param pageCert.getCn()+","+* @throws Exception*/public static Cert genSM2CertByX509v3CertificateBuilder(PageCert pageCert) throws Exception {org.bouncycastle.jce.provider.BouncyCastleProvider bouncyCastleProvider = new org.bouncycastle.jce.provider.BouncyCastleProvider();Security.addProvider(bouncyCastleProvider);String fileName = "root"+new Date().getTime()/1000;String path  = "F:/root/";String rootCertPath = path+fileName+".cer";Cert cert = new Cert();try {//公私钥对 QQ:783021975KeyPair kp = KeyGenUtil.getKeyPair2SM2(path,fileName);//转换成ECPublicKeyParameters  ECPrivateKeyParametersECPublicKeyParameters bcecPublicKey =(ECPublicKeyParameters) ECUtil.generatePublicKeyParameter(kp.getPublic());ECPrivateKeyParameters bcecPrivateKey = (ECPrivateKeyParameters) ECUtil.generatePrivateKeyParameter(kp.getPrivate());//申请服务器证书信息String  issuerString = "CN="+pageCert.getCn()+",O="+pageCert.getO();X500Name issueDn = new X500Name(issuerString);  X500Name subjectDn = new X500Name(issuerString);  SubjectPublicKeyInfo info =createSubjectECPublicKeyInfo(bcecPublicKey);SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfo.getInstance(ASN1Sequence.getInstance(kp.getPublic().getEncoded()));X509v3CertificateBuilder builder = new X509v3CertificateBuilder(issueDn, BigInteger.valueOf(System.currentTimeMillis()), new Date(), Util4Hex.getYearLater(5), Locale.CHINA, subjectDn, info);//基本约束BasicConstraints basicConstraints = new BasicConstraints(0);builder.addExtension(Extension.basicConstraints, true, basicConstraints);//添加CRL分布点 QQ:783021975builder.addExtension(Extension.cRLDistributionPoints, true, XSCertExtension.getCRLDIstPoint());//添加证书策略 QQ:783021975builder.addExtension(Extension.certificatePolicies, true, new DERSequence(XSCertExtension.getPolicyInfo()));//颁发者密钥标识DigestCalculator calculator = new BcDigestCalculatorProvider().get(new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1));X509ExtensionUtils extensionUtils = new X509ExtensionUtils(calculator);builder.addExtension(Extension.authorityKeyIdentifier, false, extensionUtils.createAuthorityKeyIdentifier(publicKeyInfo));//使用者密钥标识 builder.addExtension(Extension.subjectKeyIdentifier, false,extensionUtils.createSubjectKeyIdentifier(publicKeyInfo));//密钥用法 QQ:783021975builder.addExtension(Extension.keyUsage,true,XSCertExtension.getKeyUsage());//增强密钥用法 QQ:783021975builder.addExtension(Extension.extendedKeyUsage,true,XSCertExtension.getExtendKeyUsage());AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find("SM3WITHSM2");  AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find("SHA1");ContentSigner contentSigner = new BcECContentSignerBuilder(sigAlgId,digAlgId).build(bcecPrivateKey);X509CertificateHolder certificateHolder = builder.build(contentSigner);FileOutputStream outputStream = new FileOutputStream(rootCertPath);outputStream.write(certificateHolder.getEncoded());outputStream.close();//cert只是一个Java对象 没有实际意义哦cert.setCertname(fileName);cert.setCertinfo("CN="+pageCert.getCn()+",O="+pageCert.getO());cert.setSignalgor("1.2.156.10197.1.501");cert.setAlgorithm("EC&SM2");cert.setSessionalgor("SM3");cert.setStatus(0);cert.setPri_path(path+fileName+"privateKey.keystore");cert.setPub_path(path+fileName+"publicKey.keystore");return cert;} catch (Exception e) {e.printStackTrace();System.out.println("======根证书申请失败"+e.getMessage());return null;}}

 

如需要了解更多 请查看  https://blog.csdn.net/u010651369/article/details/76907312

 

 

这篇关于【SM2证书】利用BC的X509v3CertificateBuilder组装X509国密证书的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/995752

相关文章

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

Android逆向(反调,脱壳,过ssl证书脚本)

文章目录 总结 基础Android基础工具 定位关键代码页面activity定位数据包参数定位堆栈追踪 编写反调脱壳好用的脚本过ssl证书校验抓包反调的脚本打印堆栈bilibili反调的脚本 总结 暑假做了两个月的Android逆向,记录一下自己学到的东西。对于app渗透有了一些思路。 这两个月主要做的是代码分析,对于分析完后的持久化等没有学习。主要是如何反编译源码,如何找到

3.比 HTTP 更安全的 HTTPS(工作原理理解、非对称加密理解、证书理解)

所谓的协议 协议只是一种规则,你不按规则来就无法和目标方进行你的工作 协议说白了只是人定的规则,任何人都可以定协议 我们不需要太了解细节,这些制定和完善协议的人去做的,我们只需要知道协议的一个大概 HTTPS 协议 1、概述 HTTPS(Hypertext Transfer Protocol Secure)是一种安全的超文本传输协议,主要用于在客户端和服务器之间安全地传输数据

GB35114 USC安防平台 中星微国密摄像机配置 流程

中星微国密摄像机配置介绍   如下以中星微VS-IPC8021S-Y-T4摄像机为例,需要先各自获取p10文件,并通过证书签发机构或者测试SM2证书签发获取证书。 网络配置如下:  摄像机的IP地址为192.168.1.108,国标ID为34020000001320000015  系统的IP地址为192.168.1.109,国标ID为34020000002000000101 摄像机软件版本如下:

2024.09.07【读书笔记】| SMRTLink工具对PB组装疑难解答

在使用SMRT Link的pb_assembly_hifi命令进行组装分析时,可以参考以下步骤和信息: 使用pbcromwell show-workflow-details pb_assembly_hifi命令查看该工作流的详细信息。这将帮助你了解所需的输入参数和可选输入参数。 根据工作流的要求,你需要准备相应的输入文件。例如,对于单样本基因组组装,需要CCS(连续测序)的fastq文件路径作

企业网银登录提示请确认您已插入工商银行U盾证书的解决方法

昨天受人之托帮小企业财务解决上网银的问题 因为不是专业做这个的,所以只能安装“常识”行事,但结果实在是令人意想不到。 排错的步骤: 同一台电脑上尝试不同浏览器,发现360浏览器的接受度相当普遍;给U盾换不同的连接线;在不同的电脑上安装银行的插件,再重复上面的步骤1和步骤2;最终的结果,在一台电脑上可以走到下一步,但时好时坏,无法解决问题;到知乎上找答案,在一篇说明里有提到定制的qq浏览器,最后

win10系统下openssl证书生成和单向认证

文章目录 前言一、安装openssl二、创建证书目录和必要文件1、创建sslcertTest文件夹2、创建openssl.cnf文件3、创建必要文件 三、创建密钥和证书1、创建根证书私钥ca.key2、创建根证书请求文件ca.csr3、创建自签根证书ca.crt4、创建服务端私钥server.key5、创建服务端证书请求文件server.csr6、创建自签服务端证书server.crt 四、

okHttp框架的介绍 和关于https的自定义签名证书的问题

参考博客:【张鸿洋的博客】 Android Https相关完全解析 当OkHttp遇到Https 1.okhttp的介绍:  它能够处理: 一般的get请求一般的post请求基于Http的文件上传文件下载加载图片支持请求回调,直接返回对象、对象集合支持session的保持 开发平台使用:     使用前,对于Android Studio的用户,可以选择添加: compile '

【佳学基因检测】网站加密证书失效后,如何移除并为新的证书安装准备环境?

【佳学基因检测】网站加密证书失效后,如何移除并为新的证书安装准备环境? 当WoTrus DV Server CA证书失效后,你需要确保你的Nginx配置中不再引用该证书,并且移除或替换相关的证书文件。以下是具体步骤: 1. 确认Nginx配置文件 首先,检查Nginx的配置文件,确保它不再引用旧的WoTrus证书。如果你已经使用Certbot安装了Let’s Encrypt证书,Certbo