Еще немного запутался с ASN1.Я анализирую ответ метки времени RFC3161 с ruby openssl, так что я знаю спецификацию.Я почти уверен, что структура загружается правильно, но я запутался в том, как найти нужные мне части / ключи.Я понимаю, что есть последовательности (упорядоченные) и наборы (неупорядоченные / уникальные).
Я вижу, что мы можем назвать asn1_object.value[0].value[0]
, но это неуклюже и Я надеялся, что знаю ключи или заголовки,Я могу воспринимать это как JSON или YAML и просто звонить asn1_object['TSTInfo']['serialNumber']
. Разве это не работает таким образом?
Должны ли мы использовать свойства последовательности, которые должны быть в порядке, и уже знаем их положение, так как у нас также есть спецификации и длины?Это странно для меня, но, может быть, это потому, что я раньше не использовал много форматов TLV.К сожалению, openssl имеет минимальную документацию, как загрузить объект с помощью OpenSSL::ASN1.decode(der)
и получить доступ к значению по индексу.Существует также метод traverse
, но он не дает имен заголовков или чего-либо еще, что я хотел бы использовать в этом случае.
#<OpenSSL::ASN1::Sequence:0x000055fdee1a2c68
@indefinite_length=false,
@tag=16,
@tag_class=:UNIVERSAL,
@tagging=nil,
@value=
[#<OpenSSL::ASN1::ObjectId:0x000055fdee1a2ec0
@indefinite_length=false,
@tag=6,
@tag_class=:UNIVERSAL,
@tagging=nil,
@value="1.2.840.113549.1.9.52">,
#<OpenSSL::ASN1::Set:0x000055fdee1a2c90
@indefinite_length=false,
@tag=17,
@tag_class=:UNIVERSAL,
@tagging=nil,
@value=
[#<OpenSSL::ASN1::Sequence:0x000055fdee1a2cb8
@indefinite_length=false,
@tag=16,
@tag_class=:UNIVERSAL,
@tagging=nil,
@value=
[#<OpenSSL::ASN1::Sequence:0x000055fdee1a2da8
@indefinite_length=false,
@tag=16,
@tag_class=:UNIVERSAL,
@tagging=nil,
@value=
@value=
[#<OpenSSL::ASN1::ObjectId:0x000055fdee1a3190
@indefinite_length=false,
@tag=6,
@tag_class=:UNIVERSAL,
@tagging=nil,
@value="signingTime">,
#<OpenSSL::ASN1::Set:0x000055fdee1a30f0
@indefinite_length=false,
@tag=17,
@tag_class=:UNIVERSAL,
@tagging=nil,
@value=
[#<OpenSSL::ASN1::UTCTime:0x000055fdee1a3118
@indefinite_length=false,
@tag=23,
@tag_class=:UNIVERSAL,
@tagging=nil,
@value=2018-12-19 01:49:08 UTC>]>]>