Пишу скрипт, который разбирает сертификаты 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
- единственная допустимая форма для «этот сертификат не представляет центр сертификации».