3

私が使用している: java.security.cert.X509Certificateパッケージ。およびjava.security.cert.X509CRL;

たとえば、OID=2.5.29.14 (SubjectKeyIdentifier) cert.getExtensionValue("2.5.29.14");の場合など、拡張値を取得するとき。 私はこのバイト[]範囲を取得します:

[4,22,4,20, 5,125,-118,106,-44,108,39,-74,-108,-20,-27,-32,-113,64,-69,125,-8,102,-52,-24 ]

証明書を見ると、 SubjectKeyIdentifierは 5 から始まります。

質問 1: この範囲の開始点は何ですか? 4バイトです。

X509CRL で AuthorityKeyIdentifier (CRL の AuthorityKeyIdentifier == CRL がこの証明書によって署名されている場合は証明書の SubjectKeyIdentifier) を見ると、同じものがありました。

[4,24,48,22,-128,20,5,125, -118,106,-44,108,39,-74,-108,-20,-27,-32,-113,64,-69,125,-8,102, -52,-24 ] しかし、先頭に別の 6 バイトがありました。

質問 2: この範囲の開始位置は? 6バイトです。

そして別の質問:

質問 3: Identifier 値のみを取得するために ExtensionValue を解析する方法。この4バイトと6バイトは固定ですか?解析するための最良の方法は何ですか?

4

2 に答える 2

1

cert.getExtensionValue("2.5.29.14") の戻り値は、OCTET STRING のエンコーディングです。

Bouncy Castle では、実際のエンコード値を次のように取得できます。

byte[] octets = ASN1OctetString.getInstance(cert.getExtensionValue("2.5.29.14")).getOctets();

SubjectKeyIdentifier の場合、この値は別のエンコードされた OCTET STRING になるため、(ASN1OctetString と同様に) プロセスを繰り返すか、SubjectKeyIdentifier.getInstance(octets) を使用できます。AuthorityKeyIdentifier についても同じ手順に従うことができます。

この種のことをたくさん行っている場合は、bcpkix ディストリビューションの org.bouncycastle.cert のクラスも参照することをお勧めします。ホルダークラスは、このような分析や処理がしやすいように設計されています。

于 2013-05-29T07:01:46.307 に答える