// 设置开始日期和结束日期
long year = 360 * 24 * 60 * 60 * 1000;
Date notBefore = new Date();
Date notAfter = new Date(notBefore.getTime() + year);
// 设置颁发者和主题
String issuerString = "CN=root,OU=单位,O=组织";
X500Name issueDn = new X500Name(issuerString);
X500Name subjectDn = new X500Name(issuerString);
// 证书序列号
BigInteger serail = BigInteger.probablePrime(32, new Random());
//证书中的公钥
KeyPair keyPair = null;
try {
keyPair = KeyPairGenerator.getInstance("RSA", bcProvider)
.generateKeyPair();
} catch (NoSuchAlgorithmException e1) {
e1.printStackTrace();
}
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
//组装公钥信息
SubjectPublicKeyInfo subjectPublicKeyInfo = null;
try {
subjectPublicKeyInfo = SubjectPublicKeyInfo
.getInstance(new ASN1InputStream(publicKey.getEncoded())
.readObject());
} catch (IOException e1) {
e1.printStackTrace();
}
//证书的签名数据
final byte[] signatureData ;
try {
signature = Signature.getInstance("SHA1withRSA");
signature.initSign(privateKey);
signature.update(publicKey.getEncoded());
signatureData = signature.sign();
} catch (Exception e) {
throw new RuntimeException(e.getMessage(),e);
}
//组装证书
X509v3CertificateBuilder builder = new X509v3CertificateBuilder(
issueDn, serail, notBefore, notAfter, subjectDn,
subjectPublicKeyInfo);
//给证书签名
X509CertificateHolder holder = builder.build(new ContentSigner() {
ByteArrayOutputStream buf = new ByteArrayOutputStream();
@Override
public byte[] getSignature() {
try {
buf.write(signatureData);
} catch (IOException e) {
e.printStackTrace();
}
return signatureData;
}
@Override
public OutputStream getOutputStream() {
return buf;
}
@Override
public AlgorithmIdentifier getAlgorithmIdentifier() {
return AlgorithmIdentifier.getInstance(X509Util.getAlgorithmOID("SHA1withRSA"));
}
});
try {
byte[] certBuf = holder.getEncoded();
X509Certificate certificate = (X509Certificate) CertificateFactory.getInstance("X509").generateCertificate(new ByteArrayInputStream(certBuf));
System.out.println(certificate);
//证书base64编码字符串
System.out.println(Base64.encode(certificate.getEncoded()));
} catch (IOException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
}
分享到:
相关推荐
Java基于BC生成X509v3证书,以及部分扩展Extension的使用,如:BasicConstraints、CRLDIstPoint、CertificatePolicies、PolicyMappings、KeyUsage、ExtendedKeyUsage、SubjectAlternativeName、AuthorityInfoAccess...
2. **创建自签名证书**:使用`X509v3CertificateBuilder`构建X509证书,包含主体(Subject)和颁发者(Issuer)信息,通常在自签名证书中,这两个信息是一致的。还需要设置有效期、序列号、公钥等关键字段。 3. **...
实现了SM2中如下5部分1.生成密钥对2.签名与验签3....利用BC的X509v3CertificateBuilder组装X509国密证书生成证书,,,杂凑算法采用SM3 密钥派生算法参考国密办文档中的KDF实现具体可查看resouces中三个文档
java代码,基于202312最新版本的BC生成X509v3证书Demo,同时生成pfx及cer证书,并有验签的封装类和测试demo。 里面集合了两个独立的demo。 实现对证书的 扩展Extension 字段 的设置。
在"Java基于BC生成X509v3证书"的实践中,我们主要会使用Bouncy Castle库,这是一个强大的开源加密库,为Java和.NET提供了全面的密码学服务,包括对X509证书的支持。下面将详细介绍生成X509v3证书的关键步骤和知识点...
gmhelper BC库从1.59版本开始已经基本实现了国密算法(SM2、SM3、SM4),本项目是基于BC库做的一些功能的简单封装,也可以当成一个sample看,目前主要实现了以下几块功能: ...SM2 X509v3证书的签发 SM2 pfx证书的签发
本文将深入探讨基于Bouncy Castle(BC)库实现的国密算法简单封装,以及如何使用这些算法进行X509v3证书和PFX证书的签发。 首先,让我们了解一下Bouncy Castle库。Bouncy Castle是一个开源的Java和.NET加密库,提供...
本压缩包包含了针对32位和64位系统的两个补丁:SQLServer2005_BC.msi 和 SQLServer2005_BC_x64.msi,主要目的是为了提升SQL Server 2005 Business Intelligence (BI)组件的兼容性和性能。 SQL Server 2005 Business...
Broadcom BC440x网卡驱动是专门为苹果电脑设计的,确保了苹果系统能够识别并充分利用这款网络适配器,实现无线或有线网络连接。 Broadcom是一家全球领先的半导体公司,专注于提供各种类型的网络、存储和无线解决...
SQLServer2005及以后版本 向前 兼容 DTS等功能64位补丁
├── RH1288 V3 -Mainboard(BC1HGSC01)-CPLD-V112.zip ├── RH1288 V3 iBMC软件 V397 版本说明书 01.zip ├── RH1288 V3-4&8HDD-Backplane(BC1EHBD01)-CPLD-V108.zip ├── RH1288 V3-8HDD(4NVMe) Backplane...
我们研究了$$ B ^ {-} _ c $$ B-介子进入$$ \ bar {\ nu} l ^-$$νl-和同位旋零$$ X(3930)〜(2 ^ {++})$$ X(3930)(2 ++),$$ X(3940)〜(0 ^ {++})$$ X(3940)(0 ++),$$ X(4160) )〜(2 ^ {++})$...
种利用BC方法的关键词自动提取算法研究
【RH1288V3 BIOS V521】是华为服务器产品线中的一款关键固件更新,适用于RH1288V3型号的服务器。BIOS(基本输入输出系统)是计算机启动时加载的第一个软件,它负责初始化硬件并提供低级别的硬件控制,确保操作系统和...
生成、解释、验算 X.509v1/v3 证书,签名算法支持 SM3withSM2、主流 RSA、DSA、ECDSA.... 生成、解释、验算 PKCS#10 证书申请,签名算法支持 SM3withSM2、主流 RSA、DSA、ECDSA.... *** 无须打包 BouncyCastle 支持...
一种利用BC方法的关键词自动提取算法研究 请下载查看。 看明白了,源码自己写就是了 只有算法。没有源码
先生成再patch 只测试适配英文原版, 可能会掉激活 建议防火墙封禁bc