`
沙舟狼客
  • 浏览: 161695 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用BC替换X509证书的公钥

阅读更多
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));
	}
 
1
2
分享到:
评论

相关推荐

    c语言写成的取x.509证书公钥

    为了简化这些操作,你可以利用开源库,如OpenSSL,它提供了丰富的API来处理X.509证书和公钥操作。 在提供的压缩包中,文件"X.509证书取公钥"可能是实现这个过程的源代码示例。通过阅读和理解这段代码,你可以更深入...

    x509_c++x509_C++解码x509证书_c++处理x509_C++_yourself2eg

    在C++中处理X509证书涉及到加密和网络安全的知识,主要包括证书的解码、公钥的提取以及证书验证等过程。下面我们将详细探讨这些知识点。 1. **X509证书结构**: X509证书包含了一系列用于验证持有者身份的信息,如...

    X509证书解析C语言实现

    1、完整的X509证书解析方案,C语言实现; 2、内含测试程序,在Linux环境下进入目录后make即可编译,已经在ubuntu16.04环境下编译测试OK; 4、已经在扫码POS认证中得到应用,解析出证书的序列号、公钥; 5、漂亮的...

    C语言实现X509证书解析

    本文将深入探讨如何使用C语言来实现X509证书的解析,提取其中的关键信息,如证书序列号和公钥。 首先,理解X509证书的结构至关重要。X509是一种标准格式,用于存储公开密钥和相关个人信息。证书通常包含以下几部分...

    x509证书,x509证书,x509证书

    2. **电子邮件安全**:S/MIME协议利用x509证书对邮件内容进行加密和签名,确保邮件隐私和来源真实性。 3. **代码签名**:软件发布者使用x509证书对代码签名,证明代码未经篡改,避免恶意软件。 4. **设备身份验证*...

    java生成X509证书jar包

    X509证书是公钥基础设施(PKI)的一部分,用于验证服务器身份,确保数据传输的安全性。BouncyCastle库是一个强大的Java加密库,支持多种加密算法,包括国密算法,对于生成符合中国国家标准的X509证书非常有用。在这...

    x509:用于 X.509 公钥证书、属性证书、认证请求和认证路径验证的 PHP 库

    用于 X.509 公钥证书、属性证书、认证请求和认证路径验证的 PHP 库。 介绍 该库提供了 X.509 证书的纯 PHP 实现。 类层次结构适应 ASN.1 类型,这使得使用相应的 RFC 作为参考文档变得容易。 特征 X.509 证书 ( ) ...

    X509证书的各种操作

    X509证书包含了公钥、标识信息(如组织名、域名)、证书颁发机构(CA)的签名等关键数据。本主题将深入探讨X509证书的操作,包括加解密、创建、导入和导出。 1. **非对称加密**:X509证书的核心是基于非对称加密...

    vc++生成x509证书

    在描述中提到的“vc++生成x509证书”,意味着我们要用VC++来编写程序,利用OpenSSL库生成符合X.509标准的证书。 OpenSSL是一个强大的安全套接层(SSL/TLS)和加密库,它提供了各种加密算法、常用的密钥和证书操作等...

    WCF+X509证书加密小实例

    X509证书包含公钥和私钥对,公钥用于加密,私钥用于解密,从而实现非对称加密。 **WCF结合X509证书加密**的实例旨在演示如何在WCF服务中配置和使用X509证书来增强安全性。以下是一些关键步骤和概念: 1. **配置...

    PHP下RSA公钥格式转化

    要将X509证书转换为PEM格式,可以使用`openssl_x509_read()`函数读取X509证书,然后使用`openssl_pkey_get_public()`获取公钥资源,最后通过`openssl_pkey_export_to_file()`或`openssl_pkey_export()`将其导出为...

    KeyTool 工具生成X.509证书

    KeyTool工具生成X.509证书是Java平台自带的一个命令行工具,它主要用于管理和操作密钥对(公钥和私钥)以及数字证书。在本文中,我们将深入探讨KeyTool的基本用法、X.509证书的概念,以及如何使用KeyTool生成这种...

    ASN1文件查看(X509证书)

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

    x509证书结构解析源码

    在IT领域,尤其是在网络安全和Web服务中,X.509证书扮演着至关重要的角色。X.509是一种标准格式,用于表示公开密钥证书,它被广泛应用于HTTPS、SSL/TLS协议以及电子邮件安全等领域。中山大学提供的这个资源包含了...

    Openssl之X509系列

    X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。 X509证书格式 X.509证书中必须包含以下信息: 1. 版本号:指出该证书使用了哪种版本的X.509标准。 2. 序列号:创建证书的实体...

    read509.tar.gz_X509格式_read509_x509 解析_解析证书_证书

    在IT行业中,X.509是一种广泛使用的公钥基础设施(PKI)标准,用于数字证书的格式。本文将深入探讨X.509证书、`read509.tar.gz`压缩包中的`read509`程序以及如何解析X.509证书。 首先,X.509证书是电子文档,它包含...

    rfc2459.zip_509_RFC2459 C_X.509_公钥基础设施

    《RFC2459详解:X.509公钥基础设施及证书与CRL简介》 在信息技术领域,X.509公钥基础设施(PKI)是实现安全网络通信的关键标准之一,而RFC2459文档则是对这一标准的重要阐述。RFC,全称为Request for Comments,是...

    .net与Java互通的RSA公钥加密公钥解密(X509格式证书),支持分段加密

    有朋友叫帮忙做有一个RSA加解密的帮助类,后面发现是与JAVA做交互,对方提供了公钥cer文件。由于C#RSA只支持公钥加密,私钥解密。而现在只能使用公钥加密,公钥解密,而且C#与Java并不互通,所以采用第三方类库 ...

Global site tag (gtag.js) - Google Analytics