我有一个由变量访问的 X509Certificate ...
当我尝试获取证书的详细信息时,我设法通过提供的函数轻松获取 CriticalExtensions 值。
但是我想要达到的是存储在证书中并由对象 ID # 2.5.29.32 表示的非关键扩展
我试图访问的是此图中显示的策略标识符号:https://i.stack.imgur.com/xo8zX.png https://i.stack.imgur.com/xo8zX.png
我使用了以下函数
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 转换为对象的函数。
Static public DERObject toDERObject(byte[] data) throws IOException
{
ByteArrayInputStream inStream = new ByteArrayInputStream(data);
ASN1InputStream DIS = new ASN1InputStream(inStream);
return DIS.readObject();
}
希望这可以帮助有需要的人。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)