Я декодирую сертификат X.509 в формате ASN.1. Я успешно его расшифровываю, пересекая структуру, но есть одна вещь, которую я не понимаю.ASN.1 Octet Strings
Есть несколько сценариев, где я получаю строку октета, и этот сайт, на котором я играю (http://lapo.it/asn1js/), показывает, что эти строки октетов фактически содержат больше дерева ASN.1. Этот сайт аннотирует такие октетные строки с (инкапсуляциями)
Мой вопрос заключается в следующем: как узнать во время разбора, что строка октета фактически инкапсулирует что-то еще? Я просто пытаюсь разобрать его, глядя, получаю ли я тег и допустимую длину? Если нет, то это чистые байтовые данные? И если да, то это действительное поддерево?
Или это означает, что он выводится в виде байтов, и потребитель должен тогда попытаться проанализировать его, если он знает, что он закодирован для определенных ключей?
Возьмите пример, который уже загружен на сайт и нажмите «декодировать». Я имею в виду, например, смещение 332, которое является октетной строкой, которая инкапсулирует битовую строку.
Offset 332 в этом примере является * keyUsage *, что [только битовая] (HTTP://www.alvestrand.no/objectid/2.5.29.15.html). Более интересным примером может быть 'subjectAltName' 2.5.29.17, не присутствующий в этом сертификате, но https://google.com/ имеет хороший способ проверки синтаксического анализа. –
Извините, просто чтобы быть ясным, я имею в виду сертификат на сайте google.com https, у него есть 40 + altNames. Это * not * a LMGTFY ;-) –
@ mr.spuratic Offset 332 в этом примере имеет строку октета, которая содержит битовую строку. Мой вопрос в том, есть ли какое-то правило, как я могу вычесть, что примитив инкапсулирует что-то еще. Или я просто попытаюсь его декодировать, и если длины и тип все работают, то вместо этого возьмите декодированные значения? Или я знаю из какой-то спецификации, что такие предметы, как subjectAltName, всегда являются октетной строкой, которая кодирует что-то еще? – Cocoanetics