У меня есть сертификат X509 с SAN (GUID)
Предполагается, что его получит следующий метод:
private static String getGUIDStringFromSequence(final ASN1Sequence seq)
{
if (seq != null)
{
// First in sequence is the object identifier, that we must check
System.out.println(seq);
final ASN1ObjectIdentifier id = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0));
if (id != null && GUID_OBJECTID.equals(id.getId()))
{
final ASN1TaggedObject obj = (ASN1TaggedObject) seq.getObjectAt(1);
ASN1Primitive prim = obj.getObject();
// Due to bug in java cert.getSubjectAltName, it can be tagged an extra time
if (prim instanceof ASN1TaggedObject)
{
System.out.println("instance ASN1TaggedObject");
prim = ASN1TaggedObject.getInstance(((ASN1TaggedObject) prim)).getObject();
}
if (prim instanceof ASN1OctetString)
{
System.out.println("instance ASN1OctetString");
return new String(((ASN1OctetString) prim).getOctets());
}
else if (prim instanceof ASN1String)
{
System.out.println("instance ASN1String");
return ((ASN1String) prim).getString();
}
else
{
return null;
}
}
//System.out.println(id.getId());
}
return null;
}
Вывод, который я получаю, следующий:
[1.3.6.1.4.1.311.25.1, [0][0]#4d202cbf1b554732973b2ae849e7a70b]
instance ASN1TaggedObject
instance ASN1OctetString
И хотя 4d202cbf1b554732973b2ae849e7a70b
- это то, что я ищу, строка, которую я получаю в конце M ,�UG2�;*�I�
определенно не
В чем проблема? Связано ли это с кодировкой?
Заранее спасибо
UPD
Я изменил строку:
if (prim instanceof ASN1OctetString)
{
System.out.println("instance ASN1OctetString");
return new String(((ASN1OctetString) prim).getOctets());
}
до:
if (prim instanceof ASN1OctetString)
{
System.out.println("instance ASN1OctetString");
return prim.toString();
}
И я получаю #4d202cbf1b554732973b2ae849e7a70b
. Тем не менее, я все еще считаю, что я должен получить значение по-другому, а не просто вызывать .toString()
на ASN1OctetString
объекте
Кроме того, для чего нужен знак ha sh?