Basic Constraints
Basic Constraints — это расширение сертификатов X.509, используемое для указания того, может ли сертификат выступать в качестве удостоверяющего центра (CA) и, если может, какова максимальная глубина цепочки сертификации, которую он может подписывать. Данное расширение является критическим для обеспечения безопасности инфраструктуры открытых ключей (PKI), так как оно предотвращает использование сертификатов конечных субъектов для подписи других сертификатов, что могло бы привести к компрометации всей системы доверия.
История и стандартизация
Расширение Basic Constraints было впервые определено в стандарте X.509 версии 3, опубликованном Международным союзом электросвязи (ITU-T) в 1996 году. Позднее оно было включено в спецификацию RFC 5280 (Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile), которая является основным документом, регламентирующим использование сертификатов в интернете. В RFC 5280 расширение описывается как обязательное для сертификатов удостоверяющих центров и необязательное для конечных сертификатов.
Структура и синтаксис
Расширение Basic Constraints имеет следующий синтаксис в нотации ASN.1 (Abstract Syntax Notation One):
``asn1 BasicConstraints ::= SEQUENCE { cA BOOLEAN DEFAULT FALSE, pathLenConstraint INTEGER (0..MAX) OPTIONAL } ``
Параметры расширения:
- cA (Certificate Authority) — булево значение, указывающее, является ли субъект сертификата удостоверяющим центром. Если значение равно
TRUE, сертификат может использоваться для подписи других сертификатов. ЕслиFALSEили отсутствует, сертификат является конечным и не может подписывать другие сертификаты. - pathLenConstraint — целочисленное значение, определяющее максимальное количество сертификатов CA, которые могут следовать за данным сертификатом в цепочке сертификации. Если параметр отсутствует, ограничение на глубину цепочки не накладывается. Значение
0означает, что данный CA может подписывать только конечные сертификаты, но не другие CA.
Критичность расширения
Согласно стандарту RFC 5280, расширение Basic Constraints должно быть помечено как критическое (critical) для всех сертификатов CA. Это означает, что любое программное обеспечение, проверяющее сертификат, обязано распознавать и обрабатывать это расширение. Если расширение не распознано, сертификат должен быть отклонён. Для конечных сертификатов (не CA) расширение может отсутствовать или быть не критическим, но при его наличии значение cA должно быть FALSE.
Применение и значение
Предотвращение атак с подменой CA
Основная функция Basic Constraints — предотвращение атак, при которых злоумышленник, получив контроль над сертификатом конечного пользователя, мог бы использовать его для подписи поддельных сертификатов. Без этого расширения любой сертификат теоретически мог бы быть использован как CA, что разрушило бы иерархию доверия.
Ограничение глубины цепочки
Параметр pathLenConstraint позволяет ограничить количество уровней в иерархии CA. Например, корневой CA может установить pathLenConstraint=2, что разрешает подписывать до двух промежуточных CA. Это ограничение предотвращает создание неограниченно длинных цепочек сертификации, которые могли бы усложнить проверку или быть использованы для атак.
Примеры использования
- Корневой сертификат CA:
cA=TRUE,pathLenConstraintне задан или задан большим числом (например, 10). - Промежуточный сертификат CA:
cA=TRUE,pathLenConstraint=0(может подписывать только конечные сертификаты) илиpathLenConstraint=1(может подписывать ещё один промежуточный CA). - Конечный сертификат (сервер, клиент, код):
cA=FALSEили расширение отсутствует.
Ограничения и критика
Несмотря на свою важность, расширение Basic Constraints имеет ряд ограничений:
- Отсутствие поддержки в старых системах: Некоторые устаревшие реализации PKI не обрабатывают это расширение корректно, что может привести к уязвимостям. Например, в ранних версиях OpenSSL (до 0.9.8) некритическое расширение могло быть проигнорировано.
- Сложность управления цепочками: При большом количестве промежуточных CA неправильная настройка
pathLenConstraintможет привести к невозможности построения цепочки сертификации. - Зависимость от других расширений: Basic Constraints часто используется совместно с расширениями Key Usage и Extended Key Usage, которые уточняют допустимые операции для сертификата. Например, сертификат CA с
keyCertSignв Key Usage может подписывать сертификаты, но безcA=TRUEэто недопустимо.
Сравнение с другими расширениями
| Расширение | Назначение | Связь с Basic Constraints |
|---|---|---|
| Key Usage | Определяет допустимые криптографические операции (подпись, шифрование, проверка) | Для CA обязательно наличие keyCertSign |
| Extended Key Usage | Уточняет цель использования сертификата (TLS-сервер, подпись кода, электронная почта) | Не применяется к CA, только к конечным сертификатам |
| Subject Key Identifier | Идентифицирует открытый ключ субъекта | Используется для построения цепочки |
| Authority Key Identifier | Ссылается на ключ подписавшего CA | Необходим для проверки цепочки |
Интересные факты
- В ранних реализациях PKI (например, в Netscape) расширение Basic Constraints могло отсутствовать, что приводило к возможности создания «самодельных» CA.
- В 2011 году исследователи из Университета Твенте обнаружили, что некоторые коммерческие CA (например, Comodo) выпускали сертификаты с
cA=TRUEдля клиентов, что могло быть использовано для атак. - В России использование расширения Basic Constraints регулируется ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012, которые адаптируют стандарт X.509 для национальных криптографических алгоритмов.
Источники
- RFC 5280 — Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile
- ITU-T Recommendation X.509 (1996) — Information Technology — Open Systems Interconnection — The Directory: Public-Key and Attribute Certificate Frameworks
- ГОСТ Р 34.10-2012 — Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи
- ГОСТ Р 34.11-2012 — Информационная технология. Криптографическая защита информации. Функция хэширования
- Стандарт PKCS#10 — Certification Request Syntax Specification
- Документация OpenSSL по расширениям сертификатов
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →