2011-09-09 13 views
2

私はX509Certificateを変数でアクセスしています...
証明書の詳細を取得しようとすると、提供された関数によってCriticalExtensionsの値がeasly取得されます。
しかし、私が到達しようとしていることは私がアクセスしようとしていることで表示されているポリシー識別子番号です2.5.29.32
証明書の拡張(情報)値にアクセスする方法は?

をcertifcateに保存され、オブジェクトID番号で表され、いずれも重要な拡張でありますこの画像:http://i.stack.imgur.com/xo8zX.png

iは

cert.getExtensionValue("2.5.29.32"); 

次の関数を使用するが、それは誰もが私が間違ってやっているものを私に伝えることができます。..私に価値を与えるものではありませんか?
P .:私はjava.security.cert.X509Certificateを使用しています。

+0

それはあなたに何を与えるのですか?証明書がその拡張子を含んでいない場合はどうなりますか? –

+0

私が得ている戻り値は、byte []型で、証明書にそれがない場合は[B @ 1815859と等しいです。 – 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 –

関連する問題