如何访问证书扩展(信息)值?

我有一个由变量访问的X509Certificate …
当我试图获取证书的详细信息时,我设法通过提供的function轻松获得CriticalExtensions值。
但是我想要达到的是无关键扩展,它存储在certifcate中并由Object ID#2.5.29.32表示

我想要访问的是政策标识号,如下图所示: http : //i.stack.imgur.com/xo8zX.png

我使用了以下function

cert.getExtensionValue("2.5.29.32"); 

但它没有给我价值..任何人都可以告诉我我做错了什么?
PS:我正在使用java.security.cert.X509Certificate;

发现了这个问题。
返回值是需要解码的DER Octet编码值,这里是我用来解码值的代码:

 import org.bouncycastle.asn1.DERObject; import org.bouncycastle.asn1.DEROctetString; import org.bouncycastle.asn1.ASN1InputStream; . . . . byte[] UID = cert.getExtensionValue("2.5.29.32"); DERObject derObject = toDERObject(UID); if (derObject instanceof DEROctetString) { DEROctetString derOctetString = (DEROctetString)derObject; derObject = toDERObject(derOctetString.getOctets()); } System.out.println(derObject.toString()); 

这是将DER转换为对象的function。

 Static public DERObject toDERObject(byte[] data) throws IOException { ByteArrayInputStream inStream = new ByteArrayInputStream(data); ASN1InputStream DIS = new ASN1InputStream(inStream); return DIS.readObject(); } 

希望这可以帮助有需要的人。