public static X509Certificate replaceCertPublicKey(final X509Certificate certificate,PublicKey _publicKey) throws CertificateException {
//公钥算法
String pubAlg = _publicKey.getAlgorithm();
//签名算法
String sAlg = null;
try {
sAlg = AlgorithmId.get(pubAlg).getOID().toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
//证书主题
String subjectDN = certificate.getSubjectDN().getName();
String issueDn = certificate.getIssuerDN().getName();
X500Name subject = new X500Name(subjectDN);
X500Name issuer = new X500Name(issueDn);
//组装SubjectPublicKeyInfo
byte[] publicKey = _publicKey.getEncoded();
SubjectPublicKeyInfo publicKeyInfo;
if (sAlg.equals("1.2.156.197.1.301")) {
publicKeyInfo = new SubjectPublicKeyInfo(new AlgorithmIdentifier(
sAlg), publicKey);
} else {
publicKeyInfo = new SubjectPublicKeyInfo(
ASN1Sequence.getInstance(publicKey));
}
//序列号
BigInteger serial = certificate.getSerialNumber();
//有效日期
Date notBefore = certificate.getNotBefore();
Date notAfter = certificate.getNotAfter();
//组装
X509v3CertificateBuilder certBuilder = new X509v3CertificateBuilder(
issuer, serial, notBefore, notAfter, subject, publicKeyInfo);
//签名
ContentSigner signer = new ContentSigner() {
public byte[] getSignature() {
return certificate.getSignature();
}
public OutputStream getOutputStream() {
return new ByteArrayOutputStream();
}
public AlgorithmIdentifier getAlgorithmIdentifier() {
return new AlgorithmIdentifier(
AlgorithmId.sha1WithRSAEncryption_oid.toString());
}
};
//生成证书
X509CertificateHolder certHolder = certBuilder.build(signer);
byte[] certBuf = null;
try {
certBuf = certHolder.getEncoded();
} catch (IOException e) {
e.printStackTrace();
}
CertificateFactory cf = CertificateFactory.getInstance("X509");
return (X509Certificate) cf
.generateCertificate(new ByteArrayInputStream(certBuf));
}
分享到:
相关推荐
为了简化这些操作,你可以利用开源库,如OpenSSL,它提供了丰富的API来处理X.509证书和公钥操作。 在提供的压缩包中,文件"X.509证书取公钥"可能是实现这个过程的源代码示例。通过阅读和理解这段代码,你可以更深入...
在C++中处理X509证书涉及到加密和网络安全的知识,主要包括证书的解码、公钥的提取以及证书验证等过程。下面我们将详细探讨这些知识点。 1. **X509证书结构**: X509证书包含了一系列用于验证持有者身份的信息,如...
1、完整的X509证书解析方案,C语言实现; 2、内含测试程序,在Linux环境下进入目录后make即可编译,已经在ubuntu16.04环境下编译测试OK; 4、已经在扫码POS认证中得到应用,解析出证书的序列号、公钥; 5、漂亮的...
本文将深入探讨如何使用C语言来实现X509证书的解析,提取其中的关键信息,如证书序列号和公钥。 首先,理解X509证书的结构至关重要。X509是一种标准格式,用于存储公开密钥和相关个人信息。证书通常包含以下几部分...
2. **电子邮件安全**:S/MIME协议利用x509证书对邮件内容进行加密和签名,确保邮件隐私和来源真实性。 3. **代码签名**:软件发布者使用x509证书对代码签名,证明代码未经篡改,避免恶意软件。 4. **设备身份验证*...
X509证书是公钥基础设施(PKI)的一部分,用于验证服务器身份,确保数据传输的安全性。BouncyCastle库是一个强大的Java加密库,支持多种加密算法,包括国密算法,对于生成符合中国国家标准的X509证书非常有用。在这...
用于 X.509 公钥证书、属性证书、认证请求和认证路径验证的 PHP 库。 介绍 该库提供了 X.509 证书的纯 PHP 实现。 类层次结构适应 ASN.1 类型,这使得使用相应的 RFC 作为参考文档变得容易。 特征 X.509 证书 ( ) ...
X509证书包含了公钥、标识信息(如组织名、域名)、证书颁发机构(CA)的签名等关键数据。本主题将深入探讨X509证书的操作,包括加解密、创建、导入和导出。 1. **非对称加密**:X509证书的核心是基于非对称加密...
在描述中提到的“vc++生成x509证书”,意味着我们要用VC++来编写程序,利用OpenSSL库生成符合X.509标准的证书。 OpenSSL是一个强大的安全套接层(SSL/TLS)和加密库,它提供了各种加密算法、常用的密钥和证书操作等...
X509证书包含公钥和私钥对,公钥用于加密,私钥用于解密,从而实现非对称加密。 **WCF结合X509证书加密**的实例旨在演示如何在WCF服务中配置和使用X509证书来增强安全性。以下是一些关键步骤和概念: 1. **配置...
要将X509证书转换为PEM格式,可以使用`openssl_x509_read()`函数读取X509证书,然后使用`openssl_pkey_get_public()`获取公钥资源,最后通过`openssl_pkey_export_to_file()`或`openssl_pkey_export()`将其导出为...
KeyTool工具生成X.509证书是Java平台自带的一个命令行工具,它主要用于管理和操作密钥对(公钥和私钥)以及数字证书。在本文中,我们将深入探讨KeyTool的基本用法、X.509证书的概念,以及如何使用KeyTool生成这种...
Asn1View: a free tool to view asn1-decode file,or base64 decoded. this current is a beta version. author: i,liukang,a programmer of china,to develope pki system and pmi.... please info if you find...
在IT领域,尤其是在网络安全和Web服务中,X.509证书扮演着至关重要的角色。X.509是一种标准格式,用于表示公开密钥证书,它被广泛应用于HTTPS、SSL/TLS协议以及电子邮件安全等领域。中山大学提供的这个资源包含了...
X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。 X509证书格式 X.509证书中必须包含以下信息: 1. 版本号:指出该证书使用了哪种版本的X.509标准。 2. 序列号:创建证书的实体...
在IT行业中,X.509是一种广泛使用的公钥基础设施(PKI)标准,用于数字证书的格式。本文将深入探讨X.509证书、`read509.tar.gz`压缩包中的`read509`程序以及如何解析X.509证书。 首先,X.509证书是电子文档,它包含...
《RFC2459详解:X.509公钥基础设施及证书与CRL简介》 在信息技术领域,X.509公钥基础设施(PKI)是实现安全网络通信的关键标准之一,而RFC2459文档则是对这一标准的重要阐述。RFC,全称为Request for Comments,是...
有朋友叫帮忙做有一个RSA加解密的帮助类,后面发现是与JAVA做交互,对方提供了公钥cer文件。由于C#RSA只支持公钥加密,私钥解密。而现在只能使用公钥加密,公钥解密,而且C#与Java并不互通,所以采用第三方类库 ...