2015-07-24 6 views
3

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

Как это сделать? Помимо обычных атрибутов сертификата есть некоторые дополнительные вещи, которые необходимо включить (критический атрибут говорит, что это CA, ...).

Он должен работать как минимум в наиболее важных браузерах (конечно, только в тех, которые позволяют конфигурировать корневые ЦС).

+0

Ответ на этот вопрос, кажется, хороший старт: http://stackoverflow.com/questions/12679533/how-do-i-use-bouncycastle-to- generate-a-root-certificate-and-then-a-site-certifi (Но он, вероятно, не будет работать так, как из-за ключей DSA.) – Gustave

+0

Основные ограничения: http://www.alvestrand.no/objectid /2.5.29.19.html, расширения сертификатов: https://access.redhat.com/documentation/en-US/Red_Hat_Certificate_System/8.0/html/Admin_Guide/Standard_X.509_v3_Certificate_Extensions.html – Gustave

+0

Все о расширениях сертификатов: https: // разработчик .mozilla.org/EN-US/Docs/Mozilla/Проекты/NSS/nss_tech_notes/nss_tech_note3 – Gustave

ответ

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); 

 Смежные вопросы

  • Нет связанных вопросов^_^