【问题标题】:How can I create a CA root certificate with Bouncy Castle?如何使用 Bouncy Castle 创建 CA 根证书?
【发布时间】:2015-10-15 14:25:05
【问题描述】:
我需要使用 Bouncy Castle 创建一个 X509 证书作为 CA 证书。
证书将手动添加到 Web 浏览器的受信任 CA 列表中。它将用于签署服务器证书。
我该怎么做?
除了通常的证书属性外,还必须包括一些额外的东西(关键属性说这是 CA,...)。
它至少应该在最重要的浏览器中工作(当然只在那些允许配置根 CA 的浏览器中)。
【问题讨论】:
标签:
java
https
bouncycastle
x509
ca
【解决方案1】:
我这样做了:
KeyPairGenerator rsa = KeyPairGenerator.getInstance("RSA");
rsa.initialize(4096);
KeyPair kp = rsa.generateKeyPair();
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, 1);
byte[] pk = kp.getPublic().getEncoded();
SubjectPublicKeyInfo bcPk = SubjectPublicKeyInfo.getInstance(pk);
X509v1CertificateBuilder certGen = new X509v1CertificateBuilder(
new X500Name("CN=CA Cert"),
BigInteger.ONE,
new Date(),
cal.getTime(),
new X500Name("CN=CA Cert"),
bcPk
);
X509CertificateHolder certHolder = certGen
.build(new JcaContentSignerBuilder("SHA1withRSA").build(kp.getPrivate()));
BASE64Encoder encoder = new BASE64Encoder();
System.out.println("CA CERT");
System.out.println(X509Factory.BEGIN_CERT);
encoder.encodeBuffer(certHolder.getEncoded(), System.out);
System.out.println(X509Factory.END_CERT);
System.exit(0);