JavaにX509Certificateインスタンスがあり、それがCA証明書なのかユーザー証明書なのかを識別する必要があります。
誰か助けてもらえますか?
前もって感謝します!
JavaにX509Certificateインスタンスがあり、それがCA証明書なのかユーザー証明書なのかを識別する必要があります。
誰か助けてもらえますか?
前もって感謝します!
私が行った調査によると、基本的な制約をチェックすることでチェックできます!メソッドの結果を返すためにAPIを確認してください。getBasicConstraints()
したがって、メソッドが結果を返す場合!= -1
、証明書は。と見なすことができますCA certificate
。
CA certificates
私はこれをいくつか(ルートと中間)でチェックしました、そしてそれは説明されたように動作します。また、このメソッドをいくつかのユーザー証明書で確認したところ、メソッドは結果として-1を返します。
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
}
ルート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.