Вопрос по x509certificate, public-key, certificate, java – Как создать сертификат X509 с помощью Java?

10

Я хочу создать сертификат X509 с использованием языка Java, а затем извлечь из него открытый ключ.

Я искал в Интернете и нашел много примеров кода, но все они имеют ошибки (неизвестная переменная или неизвестный тип) или имеют много предупреждений, в которых говорится что-то вроде: «метод ... из типа ... устарел» и т.п.

Например, почему следующий код не работает:

PublicKey pk;
CertificateFactory cf = CertificateFactory.getInstance("X.509");
String PKstr = pk.toString();
InputStream PKstream = new ByteArrayInputStream(PKstr.getBytes());
X509Certificate pkcert = (X509Certificate)cf.generateCertificate(PKstream);


Может кто-нибудь показать мне, как создать сертификат с использованием чистой Java или Bouncy Castle, а затем получить открытый ключ от этого?

Спасибо всем.

Ваш Ответ

2   ответа
22

используя только классы JDK. Недостатком является то, что вы должны использовать два класса из пакета sun.security.x509. Код будет:

KeyStore keyStore = ... // your keystore

// generate the certificate
// first parameter  = Algorithm
// second parameter = signrature algorithm
// third parameter  = the provider to use to generate the keys (may be null or
//                    use the constructor without provider)
CertAndKeyGen certGen = new CertAndKeyGen("RSA", "SHA256WithRSA", null);
// generate it with 2048 bits
certGen.generate(2048);

// prepare the validity of the certificate
long validSecs = (long) 365 * 24 * 60 * 60; // valid for one year
// add the certificate information, currently only valid for one year.
X509Certificate cert = certGen.getSelfCertificate(
   // enter your details according to your application
   new X500Name("CN=My Application,O=My Organisation,L=My City,C=DE"), validSecs);

// set the certificate and the key in the keystore
keyStore.setKeyEntry(certAlias, certGen.getPrivateKey(), null, 
                        new X509Certificate[] { cert });

Получите закрытый ключ из хранилища ключей, чтобы зашифровать или расшифровать данные. На основании кода отhttp://www.pixelstech.net/article/1408524957-Generate-cetrificate-in-Java----3

5

с помощью BouncyCastle создание сертификата X509 из 2 открытых ключей (ключа для сертификата и ключа для CA) выполненоВот.

Я превращаю полученный сертификат в PEMВот.

о нет. Я думаю, что плохо говорить мой вопрос. Я хочу простой код для создания обычного сертификата. leyla moazami
вход является открытым ключом указанной сущности, а выход является сертификатом, который удостоверяет этот открытый ключ. с этой целью почему вышеприведенный код не работает? leyla moazami
Ничего себе, я вообще не понимаю, что вы ищете. Вы не хотите создавать сертификат из ключа? Вы можете объяснить лучше? Что является входом, что является выходом?
Я должен добавить, что производительность BouncyCastle довольно удивительна. Я поставил этот код как Jetty и мог генерировать 8000 различных сертификатов в секунду из открытых ключей SSH и (кэшированных) данных LDAP.
CertificateFactory.generateCertificate(x) читает существующий сертификат в формате PKCS # 7 изx и возвращаетCertificate, Это документировано наdocs.oracle.com/javase/6/docs/api/java/security/cert/… , Создать его из открытого ключа сложнее, чем занимается мой код.

Похожие вопросы