Как проверить, является ли сертификат X509 сертификатом CA?

У меня есть экземпляр X509Certificate в Java, и мне нужно определить, является ли это сертификат CA или сертификат пользователя.

Может ли кто-нибудь помочь?

Заранее спасибо!

3 ответа

Решение

Согласно проведенному мною исследованию, его можно проверить, проверив основные ограничения! Проверьте 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
}

Корневой центр сертификации будет самоподписанным сертификатом с 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.
Другие вопросы по тегам