【问题标题】:Convert ASN1ObjectIdentifier to a readable String in Java将 ASN1ObjectIdentifier 转换为 Java 中的可读字符串
【发布时间】:2014-03-25 09:57:20
【问题描述】:

好的,这可能是一个非常愚蠢的问题,但我正在使用 bouncycastle 通过以下方式从 X509Certificate 解析颁发者 RDNS:

X500Name x500name = new JcaX509CertificateHolder(certificate).getIssuer();
RDN[] rdns = x500name.getRDNs();
for (int i = 0; i < rdns.length; ++i)
    String readableString = IETFUtils.valueToString(rdns[i].getFirst().getType())
    ...

...但我得到的只是一些 ASN1 OID。

那么有没有办法将 ASN1ObjectIdentifier 转换为可读的字符串,如“CN”、“OU”等...而不是 OID?

谢谢!

【问题讨论】:

    标签: java x509certificate bouncycastle asn.1


    【解决方案1】:

    看看org.bouncycastle.asn1.x500.X500NameStyle 及其实现。

    X500NameStyle x500NameStyle = RFC4519Style.INSTANCE;
    
    X500Name x500name = new JcaX509CertificateHolder( certificate ).getIssuer();
    RDN[] rdns = x500name.getRDNs();
    for ( RDN rdn : rdns ) {
        for ( AttributeTypeAndValue attribute : rdn.getTypesAndValues() ) {
            System.out.printf( "%s (%s) = %s%n",
                    x500NameStyle.oidToDisplayName( attribute.getType() ),
                    attribute.getType(),
                    attribute.getValue()
            );
        }
    }
    

    【讨论】:

    • 太棒了!这正是我一直在寻找的!只是出于好奇,你是怎么找到这个的? - 看看我自己无法做到的 API
    【解决方案2】:

    使用

    X500Name x500name = new JcaX509CertificateHolder(certificate).<b>getSubject</b>();

    会给你比getIssuer()更详细的输出。

    【讨论】:

      猜你喜欢
      • 2014-09-20
      • 1970-01-01
      • 2012-03-31
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 2020-07-29
      • 2011-06-14
      相关资源
      最近更新 更多