Bouncycastle: X509СертификатХолдер к X509Сертификат? - PullRequest
38 голосов
/ 16 июня 2011

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

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

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

Ответы [ 3 ]

70 голосов
/ 22 января 2012

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

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

А для атрибутов:

return new X509V2AttributeCertificate( attributeCertificateHolder.getEncoded() );

Не очень хорошо, так как это кодирование и декодирование, но это работает.

2 голосов
/ 29 июня 2017

Еще один вариант:)

CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
InputStream in = new ByteArrayInputStream(certificateHolder.getEncoded());
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(in);
0 голосов
/ 30 июня 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());

........

...