如何使用 X509Extension 值?

How to use X509Extension value?

1)

byte[] crldpExt = cert.getExtensionValue(X509Extensions.CRLDistributionPoints.getId());
String skiOid = X509Extensions.AuthorityKeyIdentifier.getId();

CRLDistributionPointsAuthorityKeyIdentifier 在 Bouncy Castle 1.46 中已弃用。根据 GrepCode X509Extension 值应该在这个地方使用。但我没有得到 "How to use"。

2) V3TBSCertificateGenerator.setSubject(x500Name);

根据新文档,它应该可以工作。但它给出了它不适用于参数 (X500Name) 的错误,将其更改为 (X509Name)。但是 X509Name 已被弃用。

3)

X509Principal principal = PrincipalUtil.getSubjectX509Principal(x509cert);
Vector <?> values = principal.getValues(X509Name.CN);
if (cn != null)
    certificate.setCn(cn.get(0).toString());

因为 X509Name 已弃用。这就是为什么我将其更改为以下内容:

X500Name x500name = new JcaX509CertificateHolder(x509cert).getSubject();
RDN[] cn = null;
cn = x500name.getRDNs(BCStyle.CN);
if (cn != null)
    certificate.setCn(cn.toString());

是否正确。如果我错了,请告诉我。

1) CRLDistributionPointsAuthorityKeyIdentifier 使用 X509Extension 在 bouncycastle 1.46

中可用
cert.getExtensionValue(X509Extension.cRLDistributionPoints.getId());
String skiOid = X509Extension.authorityKeyIdentifier.getId();

2) 使用 V3TBSCertificateGenerator.setSubject(x500Name); 它在 1.46 中可用且未弃用。参见 V3TBSCertificateGenerator。确保 x500Name org.bouncycastle.asn1.x500.X500Name

的导入正确

3) 或者你可以使用 X500Name.getInstance()

X500Name x500name = X500Name.getInstance(x509cert.getSubjectX500Principal().getEncoded());
RDN cn = x500name.getRDNs(BCStyle.CN)[0];
String cnAsString = IETFUtils.valueToString(cn.getFirst().getValue());