CRL (Certificate Revocation List) — это список отозванных сертификатов, формируемый и подписываемый удостоверяющим центром (CA). В контексте криптографии на JavaScript и библиотеки Jsrsasign работа с CRL основана на ASN.1-структуре X.509, где список представляет собой строго определённую последовательность полей и расширений.
CRL используется для проверки актуальности сертификатов: если сертификат присутствует в списке, он считается недействительным, даже если срок его действия ещё не истёк.
CRL в формате X.509 v2 состоит из трёх основных компонентов:
Внутри tbsCertList содержится основная структура списка
отозванных сертификатов.
Поле version указывает версию структуры CRL. Для
современных списков используется значение:
v2 (1) — обязательна для поддержки расширенийЕсли версия не указана, по умолчанию считается v1, но расширения тогда недоступны.
Поле определяет алгоритм, которым подписан CRL. Оно дублируется на верхнем уровне структуры.
Примеры алгоритмов:
SHA256withRSASHA384withECDSASHA512withRSAВ Jsrsasign алгоритмы обычно представлены строковыми идентификаторами OID или псевдонимами.
Поле issuer содержит Distinguished Name (DN)
удостоверяющего центра, выпустившего CRL.
Пример структуры:
В Jsrsasign DN представляется как объект или строка в формате RFC 2253.
Поле thisUpdate указывает момент создания или публикации
текущего CRL.
Форматы:
Это поле критично для определения актуальности списка.
Поле nextUpdate определяет дату, до которой CRL
считается действительным.
Если сертификат проверяется после этой даты, CRL считается устаревшим и должен быть загружен заново.
Отсутствие nextUpdate допускается, но не
рекомендуется.
Это массив записей, каждая из которых описывает конкретный отозванный сертификат.
Каждый элемент содержит:
Уникальный идентификатор сертификата, который был отозван.
Дата, когда сертификат был признан недействительным.
Расширения позволяют добавлять дополнительную информацию о списке отзыва.
Это поле присутствует только в CRL v2.
Расширения играют ключевую роль в современных PKI-системах. Они позволяют расширить стандартный формат без изменения базовой структуры.
Каждое расширение имеет:
OID: 2.5.29.35
Используется для идентификации ключа CA, подписавшего CRL.
Содержит:
Позволяет однозначно связать CRL с конкретным ключом удостоверяющего центра.
OID: 2.5.29.20
Последовательный номер CRL, увеличивающийся при каждом новом выпуске.
Используется для:
OID: 2.5.29.27
Указывает, что CRL является дельта-списком.
Дельта-CRL содержит только изменения с момента предыдущего полного CRL.
Значение:
OID: 2.5.29.28
Определяет точку распространения CRL и область действия списка.
Содержит:
Позволяет сегментировать списки отзыва по типам сертификатов.
OID: 2.5.29.46
Указывает на расположение дельта-CRL.
Используется для оптимизации загрузки: клиент может загружать только изменения.
Хотя формально это расширение записи, а не CRL, оно тесно связано.
OID: 2.5.29.21
Возможные причины отзыва:
CertificateList ::= SEQUENCE {
tbsCertList TBSCertList,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING
}
TBSCertList ::= SEQUENCE {
version Version OPTIONAL,
signature AlgorithmIdentifier,
issuer Name,
thisUpdate Time,
nextUpdate Time OPTIONAL,
revokedCertificates SEQUENCE OF RevokedCertificate OPTIONAL,
crlExtensions [0] EXPLICIT Extensions OPTIONAL
}
Каждая запись в списке отзыва:
RevokedCertificate ::= SEQUENCE {
userCertificate CertificateSerialNumber,
revocationDate Time,
crlEntryExtensions Extensions OPTIONAL
}
В Jsrsasign CRL обычно обрабатывается через ASN.1-парсер и объектную модель.
Типичный сценарий:
Пример логической структуры:
tbsCertList.issuertbsCertList.revokedCertificates[]tbsCertList.extensionsПри разборе CRL библиотека:
Важно учитывать:
При валидации сертификата проверяются:
Расширения влияют на:
Приводит к использованию устаревших списков.
Без применения базового CRL дельта-список теряет смысл.
Может привести к неверной валидации цепочки доверия.
Несоответствие CA и CRL делает проверку недостоверной.