2011-09-09 2 views
2

변수를 통해 액세스 한 X509Certificate이 있습니다 ...
인증서의 세부 정보를 얻으려고 할 때 제공되는 기능에 따라 CriticalExtensions 값을 easly 가져올 수 있습니다.
그러나 내가 도달 할 노력하고있어 개체 ID 번호로 certifcate에 저장되고 표현되는 것도 중요한 확장 2.5.29.32
인증서 확장 (정보) 값에 액세스하는 방법?

내가 액세스를 시도하고있어 쇼에 정책 식별자 번호입니다 이 이미지 : http://i.stack.imgur.com/xo8zX.png

i는 다음과 같은 기능

cert.getExtensionValue("2.5.29.32"); 

하지만 나에게 값 .. 사람이 내가 잘못 뭘하는지 말해 줄 수를 제공하지 않습니다를 사용?
P .: 저는 java.security.cert.X509Certificate를 사용하고 있습니다.

+0

글쎄, 그것은 무엇을 제공합니까? 인증서에 해당 확장이 포함되어 있지 않으면 무엇을 제공합니까? –

+0

내가 얻는 반환 값은 [B @ 1815859와 같은 byte [] 유형입니다. 인증서에 null이 있거나 0을 반환해야하는 경우. – Waiel

답변

10

발견.
리턴 값은 디코딩 될 필요 DER 진수 코드 값이고, 여기서 I의 값을 디코딩하는데 사용되는 코드이다

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(); 
} 

희망이있는 사람에게 도움이되기를 바랍니다.

+0

제 질문을 참조하십시오 : http://stackoverflow.com/questions/40613147/value-of-the-policy-identifier-and-the-subject-type-of-basic-constraints-in-a-x5 –

관련 문제