Как проверить, является ли сертификат 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.