Bouncycastle: X509CertificateHolder X509Certificate?

В версиях до r146 можно было напрямую создавать X509Certificate объектов. Теперь этот API устарел, а новый предоставляет только объект X509CertificateHolder.

Я не могу найти способ преобразовать X509CertificateHolder в X509Certificate.

Как это может быть сделано?


person Steffen Heil    schedule 16.06.2011    source источник
comment
У вас есть ссылка на онлайн-документацию по API?   -  person Petey B    schedule 16.06.2011
comment
Спасибо, Штеффен. Это было очень полезно.   -  person Martynas    schedule 13.11.2011
comment
@SteffenHeil, вы должны поместить ответ в раздел ответов, чтобы мы могли пометить его как отвеченный.   -  person Ben    schedule 20.01.2012


Ответы (3)


Отвечу на свои вопросы, но не удалю, вдруг у кого-то возникнут такие же проблемы:

return new JcaX509CertificateConverter().setProvider( "BC" )
  .getCertificate( certificateHolder );

И для сертификатов атрибутов:

return new X509V2AttributeCertificate( attributeCertificateHolder.getEncoded() );

Не красиво, так как это кодирование и декодирование, но это работает.

person Steffen Heil    schedule 22.01.2012
comment
Отличная ссылка. Спасибо. - person H Marcelo Morales; 11.12.2012
comment
X509V2AttributeCertificate теперь устарел. Я не уверен, что использовать или как анализировать. X509AttrCertParser не устарел, но engineRead() возвращает X509V2AttributeCertificate, который устарел. - person Stealth Rabbi; 24.02.2016
comment
Я думаю, вам следует удалить вызов метода .setProvider( "BC" ), поскольку он не является строго обязательным. - person Jaime Hablutzel; 13.09.2017

Вот еще вариант :)

CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
InputStream in = new ByteArrayInputStream(certificateHolder.getEncoded());
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(in);
person Diego Palomar    schedule 29.06.2017
comment
Слишком подробный ответ @SteffenHeil кажется самым стандартным методом. - person Jaime Hablutzel; 13.09.2017

Это возможность получить X509CertificateHolder в X509Certificate и toString. (первое предложение кода не имеет значения)

X509CertificateHolder selfSignedCertificate = CertificateUtils.selfSignCertificate(certificationRequest, keyPair.getPrivate());
byte[] content = selfSignedCertificate.getEncoded();
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) certificateFactory.generateCertificate(new ByteArrayInputStream(content));
logger.debug("cert: {}", cert.toString());

........

person Paul    schedule 30.06.2017
comment
Вы должны добавить некоторые пояснения. - person Cà phê đen; 30.06.2017