Назад | Перейти на главную страницу

Расширения x509: может ли extnValue быть пустым?

Пишу скрипт, который разбирает сертификаты x509. Сертификаты x509 v3 имеют расширения, которые представляют собой последовательность ASN.1, содержащую OID, critical флаг, а строка октета называется extnValue.

Для basicConstraints extension, предполагается, что extnValue будет другой последовательностью ASN.1 с подробностями.

Я столкнулся с сертификатом, в котором вместо этого была пустая последовательность. Буквально байты 0x30 0x00 которые анализируют последовательность ASN.1 нулевой длины вместо ожидаемого набора данных (логическое значение для центра сертификации и целое число для длины пути.

Тот факт, что я нашел в дикой природе сертификат с таким качеством, означает, что это является действительный, но я надеялся найти конкретное правило протокола по этому поводу, чтобы мой скрипт мог обработать его правильно, а не выдавать ошибку.

extnValue не пусто, это 30 00, которая представляет собой пустую последовательность.

https://tools.ietf.org/html/rfc5280#section-4.2.1.9 говорит, что кодировка значения расширения Basic Constraints

BasicConstraints ::= SEQUENCE {
    cA                      BOOLEAN DEFAULT FALSE,
    pathLenConstraint       INTEGER (0..MAX) OPTIONAL }

Следовательно, пустая последовательность логически { cA: FALSE, pathLenConstraint: Not Present }.

Поскольку сертификаты используют кодировку ASN.1 DER, DEFAULT значение никогда не следует указывать, а в тексте говорится, что pathLenConstraint никогда не следует указывать, когда cA установлен на FALSE, так 30 00 - единственная допустимая форма для «этот сертификат не представляет центр сертификации».