`
OpenMind
  • 浏览: 179809 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java编程方式生成CA证书

阅读更多

下面是java编程方式生成CA证书的代码,使用的是BC的provider。生成CA证书与生成普通证书的区别是:1,生成CA证书时,issuer和subject一致;2,在ContentSigner.build()的时候(签名的时候)使用的是与待签名公钥相应的私钥。

下面代码,CA生成以后把私钥和证书一起以一个key entry的方式存入一个jks文件。

    static {
		 Security.addProvider(new BouncyCastleProvider());
	}
	public static void main(String[] args) {
		try {
			KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
			kpg.initialize(2048);
			KeyPair keyPair = kpg.generateKeyPair();
			KeyStore store = KeyStore.getInstance("JKS");
			store.load(null, null);
			String issuer = "C=CN,ST=GuangDong,L=Shenzhen,O=Skybility,OU=Cloudbility,CN=Atlas Personal License CA,E=cwjcsu@126.com";
			String subject = issuer;
			//issuer 与 subject相同的证书就是CA证书
			Certificate cert = generateV3(issuer, subject,
					BigInteger.ZERO, new Date(System.currentTimeMillis() - 1000
							* 60 * 60 * 24),
					new Date(System.currentTimeMillis() + 1000L * 60 * 60 * 24
							* 365 * 32), keyPair.getPublic(),//待签名的公钥
					keyPair.getPrivate(), null);
			store.setKeyEntry("atlas", keyPair.getPrivate(),
					"atlas".toCharArray(), new Certificate[] { cert });
			cert.verify(keyPair.getPublic());
			File file = new File("resource/atlas-ca.jks");
			if (file.exists() || file.createNewFile())
				store.store(new FileOutputStream(file), "atlas".toCharArray());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static Certificate generateV3(String issuer, String subject,
			BigInteger serial, Date notBefore, Date notAfter,
			PublicKey publicKey, PrivateKey privKey, List<Extension> extensions)
			throws OperatorCreationException, CertificateException, IOException {

		X509v3CertificateBuilder builder = new JcaX509v3CertificateBuilder(
				new X500Name(issuer), serial, notBefore, notAfter,
				new X500Name(subject), publicKey);
		ContentSigner sigGen = new JcaContentSignerBuilder("SHA1withRSA")
				.setProvider("BC").build(privKey);
		//privKey:使用自己的私钥进行签名,CA证书
		if (extensions != null)
			for (Extension ext : extensions) {
				builder.addExtension(new ASN1ObjectIdentifier(ext.getOid()),
						ext.isCritical(),
						ASN1Primitive.fromByteArray(ext.getValue()));
			}
		X509CertificateHolder holder = builder.build(sigGen);
		CertificateFactory cf = CertificateFactory.getInstance("X.509");
		InputStream is1 = new ByteArrayInputStream(holder.toASN1Structure()
				.getEncoded());
		X509Certificate theCert = (X509Certificate) cf.generateCertificate(is1);
		is1.close();
		return theCert;
	}
	public class Extension {
		private String oid;
		private boolean critical;
		private byte[] value;

		public String getOid() {
			return oid;
		}

		public byte[] getValue() {
			return value;
		}

		public boolean isCritical() {
			return critical;
		}
	}
分享到:
评论

相关推荐

    java生成CA证书

    Java生成CA证书涉及到了几个关键概念,包括公钥加密、私钥解密、数字签名以及证书颁发机构(CA)。...通过Java编程,我们可以创建自己的CA,从而控制和验证我们系统中的数字证书,增强网络的安全性。

    java代码生成数字证书

    然而,本案例中我们不使用keytool,而是通过编程方式生成证书。 4. **Java密钥和证书管理**:在Java中,`java.security.KeyPairGenerator`类用于生成密钥对,`java.security.cert.Certificate`接口代表证书,而`...

    Java实现浏览器CA证书的签名和验证

    Java作为应用广泛的编程语言,为开发者提供了强大的工具和API,来实现证书的生成、管理、签名、验证等功能,极大地提高了网络交易和通信的安全性。通过本文的详细阐述,可以清楚地了解CA证书的重要性和在Java中实现...

    JAVA 用代码生成数字证书源码

    在Java编程环境中,生成数字证书是一项关键的安全技术,主要用于数据加密、身份验证和签名等应用场景。数字证书通常包含了公钥和私钥对,以及证书持有者的相关信息,这些信息经过认证机构(CA)的签名,确保了证书的...

    java生成X509证书jar包

    这个过程涉及到的标签"java"、"jar"、"开发语言"指的是使用Java编程语言进行开发并打包成jar文件;"https"和"网络协议"是指生成的X509证书在HTTPS通信中的应用。通过这个jar包,开发者可以在他们的项目中快速生成...

    certificate-generator-master_java证书生成_

    在Java编程环境中,生成证书是一项常见的任务,尤其在网络安全、HTTPS服务器配置以及开发自签名证书等方面有着广泛应用。标题“certificate-generator-master_java证书生成_”暗示我们关注的是一个用于生成证书的...

    Java 数字签名、数字证书生成源码

    在这个Java源码包中,我们可能找到了用于生成数字签名和数字证书的相关代码,这对于理解和实践Java的安全编程至关重要。 数字签名是一种用于验证电子信息完整性的方法,它结合了非对称加密技术。在Java中,我们可以...

    Certificate_java_java数字签名_java签名证书_数字证书_

    在Java编程环境中,数字证书和数字签名是网络安全和数据完整性的重要组成部分。这些概念与Java的加密库和证书处理机制紧密相关。在这个项目中,我们似乎有一个包含Java实现数字证书和数字签名功能的源码模块。 首先...

    Java 数字签名、数字证书生成源码.7z

    在这个"Java 数字签名、数字证书生成源码"压缩包中,包含了实现这些功能的源代码,对于理解Java安全编程和实际应用具有很高的价值。 1. **数字签名** 数字签名是一种用于验证电子文档完整性和发送者身份的技术。在...

    Java实战:CSDN博客安全认证头x-ca-nonce与x-ca-signature解析与生成.zip

    在Java编程领域,安全是至关重要的,特别是在网络通信中。CSDN博客作为一个知名的开发者社区,为了保护用户信息和防止恶意攻击,采用了安全认证机制。本文将深入探讨CSDN博客安全认证头中的两个关键元素:`x-ca-...

    Java实现CSDN博客安全头x-ca-nonce与x-ca-signature的生成与测试.zip

    总结来说,Java实现CSDN博客安全头"x-ca-nonce"与"x-ca-signature"的生成涉及到随机字符串的生成和哈希签名的计算,这两个过程都是网络安全中的基础操作。通过理解和实践这些代码,开发者可以更好地理解Web服务的...

    Java Https请求,跳过证书,直接访问

    在Java编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种用于在互联网上安全传输数据的协议,它基于HTTP,但提供了额外的安全性层,通过SSL/TLS(Secure Sockets Layer/Transport Layer Security)来加密...

    java在IE中下载证书并安装(根证书)

    7. **编程实现**:在Java中,可以使用`Runtime.getRuntime().exec()`方法执行操作系统命令,例如安装证书的命令。同时,需要处理异常和错误输出,确保程序的健壮性。 8. **证书生命周期管理**:除了安装,证书还有...

    java源码:Java 数字签名、数字证书生成源码.rar

    Java 数字签名与数字证书是Java安全编程中的关键概念,它们在网络安全中起着至关重要的作用,用于确保数据的完整性和验证发送者身份。这里,我们深入探讨这两个主题及其在Java中的实现。 **数字签名** 数字签名是...

    Java如何基于command调用openssl生成私钥证书

    Java基于command调用openssl生成私钥证书 Java是一种广泛使用的编程语言,而openssl是一种加密工具。今天,我们将介绍如何使用Java基于command调用openssl生成私钥证书。 什么是私钥证书? 私钥证书是一种数字...

    java安全通信数字证书

    在Java编程中,安全通信是确保数据在传输过程中不被篡改或窃取的关键。数字证书作为一种重要的安全机制,用于验证通信双方的身份,保证信息的真实性。本篇文章将深入探讨Java中如何实现安全通信、生成和使用数字证书...

    Des.zip_ca java

    标题中的"Des.zip_ca java"表明这是一个与Java编程语言相关的项目,主要涉及到DES(Data Encryption Standard)加密算法和CA(Certificate Authority)证书的使用。在IT领域,DES是一种经典的对称加密算法,而CA则是...

    基于Java的数字签名、数字证书生成源码.zip

    在Java编程环境中,这些概念可以通过Java Cryptography Extension (JCE) 和 Java Secure Socket Extension (JSSE) 来实现。下面我们将深入探讨基于Java的数字签名和数字证书的生成。 数字签名是一种非对称加密技术...

Global site tag (gtag.js) - Google Analytics