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

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

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

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

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

4
задан 26 April 2020 в 02:45
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: отсутствует }.

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

4
ответ дан 26 April 2020 в 00:41

Теги

Похожие вопросы