CRL Distribution Points (CDP) относится к расширениям сертификатов X.509, определяющим места, откуда можно загрузить списки отозванных сертификатов (CRL). В контексте jsrsasign это расширение играет ключевую роль при проверке статуса сертификата, позволяя динамически получать актуальные CRL вместо встраивания их в приложение.
Расширение CRL Distribution Points описывает один или несколько источников, где публикуются списки отозванных сертификатов. Каждый источник может быть представлен как URI или как LDAP-адрес.
Ключевые элементы структуры:
Расширение идентифицируется OID:
OID: 2.5.29.31
Формальное представление расширения:
CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint
DistributionPoint ::= SEQUENCE {
distributionPoint [0] DistributionPointName OPTIONAL,
reasons [1] ReasonFlags OPTIONAL,
cRLIssuer [2] GeneralNames OPTIONAL
}
DistributionPointName ::= CHOICE {
fullName [0] GeneralNames,
nameRelativeToCRLIssuer [1] RelativeDistinguishedName
}
На практике в большинстве сертификатов используется только
fullName с URI.
Чаще всего встречаются:
HTTP URL:
http://crl.example.com/intermediate.crlHTTPS URL:
https://pki.example.com/crl/root.crlLDAP:
ldap://ldap.example.com/cn=exampleCA,dc=example,dc=comHTTP/HTTPS варианты наиболее распространены в современных PKI.
В jsrsasign работа с сертификатами выполняется через объект X509. После загрузки сертификата можно получить расширение CDP напрямую.
Базовый сценарий:
var cert = new X509();
cert.readCertPEM(pemString);
После загрузки сертификата доступ к CRL Distribution Points осуществляется через метод:
var points = cert.getExtCRLDistributionPoints();
Метод возвращает массив строк, где каждая строка — это URI точки распространения CRL.
Пример результата:
[
"http://crl.example.com/root.crl",
"http://crl-backup.example.com/root.crl"
]
Если расширение отсутствует, возвращается пустой массив.
Сертификаты могут содержать несколько источников CRL. Это используется для:
Пример обработки:
var cert = new X509();
cert.readCertPEM(pem);
var crlDPs = cert.getExtCRLDistributionPoints();
for (var i = 0; i < crlDPs.length; i++) {
console.log("CRL URL:", crlDPs[i]);
}
После извлечения URL может выполняться загрузка CRL через HTTP-запрос. jsrsasign не выполняет сетевые операции самостоятельно, поэтому интеграция с транспортным уровнем реализуется отдельно.
Пример логики:
function fetchCRL(url) {
return fetch(url)
.then(res => res.arrayBuffer());
}
Далее полученный CRL может быть обработан через
X509CRL:
var crl = new X509CRL();
crl.readCertPEM(crlPem);
CRL Distribution Points хранится в виде ASN.1 DER encoded extension. Внутри сертификата:
jsrsasign автоматически декодирует этот блок при вызове
getExtCRLDistributionPoints().
Помимо специализированного метода, расширения могут быть доступны через универсальный интерфейс:
var ext = cert.getExtInfo();
Однако CRL Distribution Points обычно извлекаются напрямую, так как это наиболее часто используемое PKI-расширение после SAN и Key Usage.
При обработке важно учитывать:
Пример фильтрации:
var validPoints = crlDPs.filter(function(url) {
return url.startsWith("http://") || url.startsWith("https://");
});
CRL Distribution Points напрямую участвует в процессе проверки цепочки доверия:
В jsrsasign логика проверки обычно строится поверх:
var cert = new X509();
cert.readCertPEM(pemString);
// извлечение CRL Distribution Points
var crlPoints = cert.getExtCRLDistributionPoints();
// вывод всех источников
for (var i = 0; i < crlPoints.length; i++) {
console.log(crlPoints[i]);
}
Разные удостоверяющие центры используют CDP по-разному:
Также встречаются случаи, когда CDP отсутствует, и тогда используется OCSP как альтернативный механизм проверки статуса сертификата.
При использовании библиотеки следует учитывать:
CRL Distribution Points в jsrsasign выполняет исключительно информационную роль, предоставляя структуру данных для дальнейшей обработки внешними компонентами системы.