Как я могу создать корневой сертификат CA с помощью Bouncy Castle?

Мне нужно создать сертификат X509 с Bouncy Castle, который служит сертификатом CA. Сертификат будет добавлен вручную в список доверенных CA веб-браузеров. Он будет использоваться для подписи сертификатов сервера.

Как мне это сделать? Помимо обычных атрибутов сертификата, есть некоторые дополнительные вещи, которые должны быть включены (критический атрибут, говорящий, что это 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);
Другие вопросы по тегам