java 产生p10证书_PKCS#10 以及证书颁发过程具体实现-程序员宅基地

技术标签: java 产生p10证书  

用户首先产生自己的密钥对,并将公共密钥及部分个人信息传送给CA(通过P10请求)

CertAndKeyGen gen = new CertAndKeyGen("RSA", "SHA1WithRSA");

gen.generate(1024);//生成1024位密钥

PKCS10CertificationRequestBuilder p10Builder = new JcaPKCS10CertificationRequestBuilder(

new X500Principal("CN = " + name), gen.getPublicKey());// CN和公钥

JcaContentSignerBuilder csBuilder = new JcaContentSignerBuilder("SHA256withRSA");// 签名算法

ContentSigner signer = null;

signer = csBuilder.build(gen.getPrivateKey());

PKCS10CertificationRequest csr = p10Builder.build(signer);// PKCS10的请求

return csr;//返回PKCS10的请求

CA接受请求并生成证书

CertificateFactory certFactory = CertificateFactory.getInstance("X.509");

X509Certificate cacert = (X509Certificate) certFactory.generateCertificate(new FileInputStream(certPath));

//一大堆参数 ,填充到生成器里

AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find("SHA1withRSA");

AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlgId);

org.bouncycastle.asn1.x500.X500Name issuer = new org.bouncycastle.asn1.x500.X500Name(

cacert.getSubjectX500Principal().getName());

BigInteger serial = new BigInteger(32, new SecureRandom());

Date from = new Date();

Date to = new Date(System.currentTimeMillis() + (365 * 80 * 86400000L));

X509v3CertificateBuilder certgen = new X509v3CertificateBuilder(issuer, serial, from, to, csr.getSubject(),

csr.getSubjectPublicKeyInfo())

Key privateKey = productPrivateKey();

// CA端进行签名, 才有具有法律效力

ContentSigner signer = new BcRSAContentSignerBuilder(sigAlgId, digAlgId)

.build(PrivateKeyFactory.createKey(privateKey.getEncoded()));

// 生成BC结构的证书

Security.addProvider(new BouncyCastleProvider());

X509Certificate resultBc = new JcaX509CertificateConverter().setProvider("BC").getCertificate(certgen.build(signer));

return resultBc;//返回证书

CSR:证书签发请求(Certificate Signing Request),

CSR也叫做认证申请,是一个发送到CA的请求认证信息。 有两种格式,应用最广泛的是由PKCS#10定义的,另一个用的少的是由SPKAC定义的,主要应用于网景浏览器。

在PKCS#10定义中,CSR有两种编码格式:二进制(ASN.1或DER (Distinguished Encoding Rules))和文本格式(the text or PEM (Privacy Enhanced Mail)formatted CSR is the binary CSR after it has been Base-64 encoded to create a text version of the CSR.)

CSR文件生成步骤如下:

根据Version、Distinguished Name、Public Key、Attributes生成请求证书;

用Private Key加密证书请求信息;

根据请求信息、签名算法和签名生成CSR文件;

CSR文件包含的信息描述如下

CertificationRequest ::= SEQUENCE {

certificationRequestInfo CertificationRequestInfo,//证书信息

signatureAlgorithm AlgorithmIdentifier{ { SignatureAlgorithms }},//签名算法

signature BIT STRING //签名

}//另外还可能有可选的字段,如postal address和Email address,这两个字段可以应用于证书的撤销。

注意:私钥不包含在CSR文件中,但是应用于数字签名。

签名分两步

将certificateRequestInfo 进行DER编码,产生八位字节字符串;

将步骤一的结果用请求者的私钥在指定的签名算法下,产生签名;

请求信息定义如下

CertificationRequestInfo ::= SEQUENCE {

version INTEGER { v1(0) } (v1,...),

subject Name, //证书主体的专有名称

subjectPKInfo SubjectPublicKeyInfo{ { PKInfoAlgorithms }},

attributes [0] Attributes{ { CRIAttributes }}

}

subjectPublicKeyInfo 包含被认证的公钥

attributes 关于认证主提其他信息属性集合

SubjectPublicKeyInfo { ALGORITHM : IOSet} ::= SEQUENCE {

algorithm AlgorithmIdentifier { {IOSet}},

subjectPublicKey BIT STRING

}

PKInfoAlgorithms ALGORITHM ::= {

... -- add any locally defined algorithms here -- }

Attributes { ATTRIBUTE:IOSet } ::= SET OF Attribute{ { IOSet }}

CRIAttributes ATTRIBUTE ::= {

... -- add any locally defined attributes here -- }

Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE {

type ATTRIBUTE.&id({IOSet}),

values SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{@type})

}

等价写法

CertificationRequest ::= SIGNED { EncodedCertificationRequestInfo }

(CONSTRAINED BY { -- Verify or sign encoded

-- CertificationRequestInfo -- })

EncodedCertificationRequestInfo ::=

TYPE-IDENTIFIER.&Type(CertificationRequestInfo)

SIGNED { ToBeSigned } ::= SEQUENCE {

toBeSigned ToBeSigned,

algorithm AlgorithmIdentifier { {SignatureAlgorithms} },

signature BIT STRING

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_35390150/article/details/114567487

智能推荐

使用python处理“2021-10-21T10:15:00.000+0000“格式的时间_2021-10-30t08:06:00.000+0000-程序员宅基地

文章浏览阅读2.8k次,点赞5次,收藏8次。百度或者google很难搜到靠谱的解决方案,学习的时候顺带记录import datetimeutc_data1="2021-11-01T20:17:00.000+0000"t = utc_data1[:-9]utc_date2=datetime.datetime.strptime(t,"%Y-%m-%dT%H:%M:%S")local_date=utc_date2+datetime.timedelta(hours=8)local_date=datetime.datetime.strfti._2021-10-30t08:06:00.000+0000

idfa还是idfv,IOS唯一标示利弊分析_idfv 重置-程序员宅基地

文章浏览阅读6.7k次。先说结论,idfv很坑,推荐idfaidfv的特性是可以让你家公司的每个app都共享一个id,确实很美,但是一旦同一个idfv的app都被卸载了,这个idfv就会重置!大多数情况下,一个手机估计只会装上你家公司第一个app,所以每次卸载重置都会重新生成,坑。idfa的劣势是可能取不到,也可能被改变,但是我用4S测试发现,现在广告追踪依然能取到,不知道是不是bug。而且用_idfv 重置

HTML表格&表格标签的属性_在表格html代码中什么标签表示表格框架什么标签表示行什么标签表示单元格-程序员宅基地

文章浏览阅读1w次,点赞18次,收藏54次。一、表格标签<table>&行标签<tr>&单元格标签<td>HTML的 table 元素表示表格数据 标签省略 不允许,开始标签和结束标签都不能省略HTML <tr> 元素定_在表格html代码中什么标签表示表格框架什么标签表示行什么标签表示单元格

基于阿里云、小程序、Arduino的WS2812灯控系统(完整源码以及实现步骤)_ws2812迷你控制板开源-程序员宅基地

文章浏览阅读4.5k次。使用微信小程序控制ws2812灯带,可以实现实时RGB变色以及控制开关。_ws2812迷你控制板开源

【数字IC验证快速入门】17、SystemVerilog学习之基本语法4(随机化Randomization)_ic 随机化-程序员宅基地

文章浏览阅读1k次。导读:作者有幸在中国电子信息领域的排头兵院校“电子科技大学”攻读研究生期间,接触到前沿的数字IC验证知识,旁听到诸如华为海思、清华紫光、联发科技等业界顶尖集成电路相关企业面授课程,对数字IC验证有了一些知识积累和学习心得。为帮助想入门前端IC验证的朋友,思忱一二后,特开此专栏,以期花最短的时间,走最少的弯路,学最多的IC验证技术知识。文章目录一、内容概述一、内容概述为什么使用随机化验证策略SystemVerilog 中的随机化在类(class)中声明随机变量为随机变量设置约束(Constr._ic 随机化

ASAM XCP及驱动代码、ISO 11898+CANFD,ISO 14229,ISO 15031,ISO 15765相关标准文档_asam mcd-1 xcpv1.1-程序员宅基地

文章浏览阅读1.8k次,点赞4次,收藏16次。ASAM XCP及驱动代码、ISO 14229,ISO 15031,ISO 15765文档(选中对应名称,跳转至相应的文档):一、ISO 15031 (1~7全套) OBD最新版二、ISO_15765(1~4全套)最新版+中文三、ISO 15031 -Part1~7 OBD最新版_超清四、ISO 14229 -Part1~7_ UDS最新版_超清五、XCP协议基本驱动C代码.7z六、A..._asam mcd-1 xcpv1.1

随便推点

在CentOS7上运行KVM虚拟机_centos 桌面 查看安装的虚拟机-程序员宅基地

文章浏览阅读6.8k次,点赞2次,收藏18次。在CentOS7上运行KVM虚拟机准备工作检查CPU特性安装必要的软件包安装KVM及其依赖验证安装结果启动服务并设置为开机自动运行创建网络环境使用KVM虚拟机下载操作系统的guest image准备磁盘镜像创建和管理虚拟机使用图形界面管理虚拟机参考资料准备工作检查CPU特性CPU应该支持vmx特性以更好地运行KVM虚拟机:lscpu | grep vmx安装必要的软件包sudo yum ..._centos 桌面 查看安装的虚拟机

【net core 学习笔记】NETSDK1004    找不到资产文件_严重性代码说明项目文件行禁止显示状态 错误netsdk1004找不到资产文件“c-程序员宅基地

文章浏览阅读7.9k次,点赞4次,收藏8次。visual studio 2019 创建core console项目之后,程序编译没有通过,提示如下消息严重性 代码 说明 项目 文件 行 禁止显示状态错误 NETSDK1004 找不到资产文件“C:\Users\Administrator\Source\Repos\ConsoleApp2\ConsoleApp2\obj\project.assets.json”。运行 NuGet 包还原以生成此文件。 ConsoleApp2 C:\Prog..._严重性代码说明项目文件行禁止显示状态 错误netsdk1004找不到资产文件“c

SAP物料货架寿命管理_sap 261发料 检查物料寿命-程序员宅基地

文章浏览阅读6.6k次,点赞2次,收藏33次。一、货架剩余寿命概念有些物资具有一定的保质期(比如食品、药品),根据企业的规定,已经过期的物资不得再收货入库,或者不允许领用出库、销售等,这类物资在SAP系统中可以通过货架寿命来进行管理。二、通过下面步骤来要启用货架寿命管理SAP中要做检查货架寿命到期日/生产日期需满足三个前提条件:1、在工厂层面激活。配置路径:IMG -> 物料管理 -> 库存管理和实际库存 -> ..._sap 261发料 检查物料寿命

EPOLLONESHOT事件_监听套接字lfd为什么不添加epolloneshot事件-程序员宅基地

文章浏览阅读548次。我们先从epoll谈起可以看看之前我的博客EPOLLONESHOT事件我们使用ET模式下工作,一个socket上的某个事件还是可能被多次触发。这在并发程序中就会引起一个问题。比如一个线程(或进程)在读取完某个socket上的数据后开始处理这些数据,而在数据处理的过程中该socket上又有新数据可读(EPOLLIN再次触发),此时另外一个线程被唤醒来读取这些新的数据。于是就出现了两个或多个线程..._监听套接字lfd为什么不添加epolloneshot事件

oracle i_obj4,使用bbed 修复I_OBJ4 index 报ORA-8102错误-程序员宅基地

文章浏览阅读189次。数据库执行创建表操作报ORA-8102错误SQL> startupORACLE instance started.Total System Global Area 1570009088 bytesFixed Size 2253584 bytesVariable Size 469765360 bytesDatabase Buffers ..._i_obj4 损坏

无源领域自适应:Source Hypothesis Transfer for Unsupervised Domain Adaptation_do we really need to access the source data? sourc-程序员宅基地

文章浏览阅读4.1k次,点赞12次,收藏21次。Do We Really Need to Access the Source Data? Source Hypothesis Transfer forUnsupervised Domain Adaptation欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,_do we really need to access the source data? source hypothesis transfer for

推荐文章

热门文章

相关标签