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

时间:2011-09-09 00:48:40

标签: java x509certificate

我有一个由变量访问的X509Certificate ...
当我试图获得证书的细节时,我设法通过提供的功能轻松获得CriticalExtensions值 但是我想要达到的是无关键扩展,它存储在certifcate中并由对象ID#2.5.29.32

表示

我要访问的是此图片中显示的政策标识号:http://i.stack.imgur.com/xo8zX.png

我使用了以下功能

cert.getExtensionValue("2.5.29.32");

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

1 个答案:

答案 0 :(得分:10)

发现问题。
返回的值是需要解码的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转换为对象的功能。

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

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