У меня есть экземпляр X509Certificate в Java, и мне нужно определить, является ли он сертификатом CA или сертификатом пользователя.
Может ли кто-нибудь помочь?
Спасибо заранее!
У меня есть экземпляр X509Certificate в Java, и мне нужно определить, является ли он сертификатом 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
}
Корневой ЦС будет самоподписанным сертификатом с включенным флагом keyCertSign
. В большинстве сценариев общее имя может содержать слово CA
для удобства. Промежуточный сертификат CA
может быть подписан Root CA
(или другим промежуточным звеном!). В вашем хранилище ключей броузера будут приведены примеры общепринятых сертификатов CA.
От Целевая группа Internet Engineering
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.