18

JavaにX509Certificateインスタンスがあり、それがCA証明書なのかユーザー証明書なのかを識別する必要があります。

誰か助けてもらえますか?

前もって感謝します!

4

3 に答える 3

18

私が行った調査によると、基本的な制約をチェックすることでチェックできます!メソッドの結果を返すためにAPIを確認してください。getBasicConstraints()

したがって、メソッドが結果を返す場合!= -1、証明書は。と見なすことができますCA certificate

CA certificates私はこれをいくつか(ルートと中間)でチェックしました、そしてそれは説明されたように動作します。また、このメソッドをいくつかのユーザー証明書で確認したところ、メソッドは結果として-1を返します。

于 2012-08-27T13:12:11.480 に答える
13

X509Certificate.getKeyUsage()javadoc:

KeyUsage拡張機能のビットを表すブール配列を取得します(OID = 2.5.29.15)。キー使用法の拡張機能は、証明書に含まれるキーの目的(暗号化、署名、証明書署名など)を定義します。このためのASN.1の定義は次のとおりです。

          KeyUsage ::= BIT STRING {
              digitalSignature        (0),
              nonRepudiation          (1),
              keyEncipherment         (2),
              dataEncipherment        (3),
              keyAgreement            (4),
              keyCertSign             (5),  --> true ONLY for CAs
              cRLSign                 (6),
              encipherOnly            (7),
              decipherOnly            (8) }

証明書は次のように確認できます。

X509Certificate cert = ...;
boolean[] keyUsage = cert.getKeyUsage();
if ( keyUsage[5] ) {
    // CA certificate
}
else {
    // User certificate
}
于 2015-02-12T17:40:28.010 に答える
2

ルートCAは、keyCertSignフラグが有効になっている自己署名証明書になります。ほとんどのシナリオでは、一般名CAに便宜上の単語が含まれている場合があります。中間証明書は、 (または別の中間者!)CAによって署名される場合があります。Root CAブラウザーのキーストアには、一般的に信頼されているCA証明書の例があります。

インターネットエンジニアリングタスクフォースから

The keyCertSign bit is asserted when the subject public key is
    used for verifying a signature on certificates.  This bit may only
    be asserted in CA certificates.
于 2012-08-23T13:24:06.263 に答える