如何使用Bouncy Castle创建CA根证书?

时间:2015-07-24 19:41:51

标签: java https bouncycastle x509 ca

我需要使用Bouncy Castle创建一个X509证书作为CA证书。 证书将手动添加到受信任的Web浏览器列表中。它将用于签署服务器证书。

我该怎么做? 除了通常的证书属性之外,还有一些必须包含的附加内容(关键属性说这是CA,......)。

它应该至少在最重要的浏览器中起作用(当然只能在那些允许配置根CA的浏览器中)。

1 个答案:

答案 0 :(得分: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);