要約
ASN.1(Abstract Syntax Notation One) のデータを取り扱うためのモジュールです。
OpenSSLで証明書などを取り扱うのに必要になります。
このモジュールには、ASN.1関連のモジュール関数や定数、 ASN.1 のデータ型に対応するクラスが定義されています。
このモジュールは ASN.1 を十分に取り扱うのに必要な機能は持っていません。SSL/TLSで必要な機能しか実装されていません。
ASN.1 は ITU-T と ISO によって定義された、データの構造を定義するための言語を中心とした規格です。この言語で定義された抽象的な構造を実際のバイト列で表現する方法は ASN.1 の規格の一部として数種類定義されています。このリファレンスで言及されている DER 形式もこのエンコード形式の一種です。
概要
このモジュールにおいて、 ASN.1 のデータ型は OpenSSL::ASN1::ASN1Data およびそのサブクラスにマップされています。
ASN.1 の単純型(simple type)は OpenSSL::ASN1::Primitive の各サブクラスに、構造型(structured type)は OpenSSL::ASN1::Constructive の各サブクラスに対応しています。通常これらのタグクラスは UNIVERSAL です。その値は OpenSSL::ASN1::ASN1Data#value で取り出せます。単純型は通常の Ruby のオブジェクト、構造型は配列 UNIVERSAL以外のタグクラスを付けられた型は、 OpenSSL::ASN1::ASN1Data に対応します。UNIVERSAL以外のタグクラスでタグ付けられた型のデータは、OpenSSL::ASN1::ASN1Dataのオブジェクトで表現され、その値として文字列(IMPLICITなタグ付けの場合)もしくは配列(EXPLICITなタグ付けの場合)として表現されます。 OpenSSL::ASN1::Primitive のタグ付けの情報を使うことで、 IMPLICIT or EXPLICIT なタグ付けを実現することもできます。
例:
require 'openssl' # 単純型のデータ x = OpenSSL::ASN1::UTF8String.new("foobar") # 構造型のデータ y = OpenSSL::ASN1::Sequence.new([OpenSSL::ASN1::Boolean.new(true), OpenSSL::ASN1::Integer.new(-12)]) # APPLICATION タグクラスのタグ2番でタグ付けられたデータ z = OpenSSL::ASN1::ASN1Data.new([OpenSSL::ASN1::Boolean.new(false)], 2, :APPLICATION) # 上と同様のデータを OpenSSL::ASN1::Boolean.new の2番目以降の # 引数で表現する z2 = OpenSSL::ASN1::Boolean.new(false, 2, :EXPLICIT, :APPLICATION) # IMPLICIT なタグ付けをする u = OpenSSL::ASN1::Boolean.new(false, 3, :IMPLICIT, :APPLICATION) # to_der でエンコード x.to_der # => "\f\x06foobar" y.to_der # => "0\x06\x01\x01\xFF\x02\x01\xF4" z.to_der # => "b\x03\x01\x01\x00" z2.to_der # => "b\x03\x01\x01\x00" これは z.to_der と同じ u.to_der # => "C\x01\x00" # エンコードした文字列をデコード OpenSSL::ASN1.decode(x.to_der) # => #<OpenSSL::ASN1::UTF8String:0x000000027cc700 @tag=12, @value="foobar", @tagging=nil, @tag_class=:UNIVERSAL> OpenSSL::ASN1.decode(y.to_der) # => #<OpenSSL::ASN1::Sequence:0x000000027c47d0 @tag=16, @value=[#<OpenSSL::ASN1::Boolean:0x000000027c4898 @tag=1, @value=true, @tagging=nil, @tag_class=:UNIVERSAL>, #<OpenSSL::ASN1::Integer:0x000000027c47f8 @tag=2, @value=-12, @tagging=nil, @tag_class=:UNIVERSAL>], @tagging=nil, @tag_class=:UNIVERSAL> OpenSSL::ASN1.decode(z.to_der) # => #<OpenSSL::ASN1::ASN1Data:0x000000027bc918 @tag=2, @value=[#<OpenSSL::ASN1::Boolean:0x000000027bc968 @tag=1, @value=false, @tagging=nil, @tag_class=:UNIVERSAL>], @tag_class=:APPLICATION> OpenSSL::ASN1.decode(u.to_der) # => #<OpenSSL::ASN1::ASN1Data:0x000000025bef30 @tag=3, @value="\x00", @tag_class=:APPLICATION> # @valueが "\x00" という文字列になっている
このモジュールは ASN.1 記法による記述を解釈し、利用する機能はないため、 IMPLICITなタグ付けをされたデータを適切に取り扱うことは面倒でしょう。
DER形式の文字列をデコードしてRubyのオブジェクトに変換するには OpenSSL::ASN1.#decode もしくは OpenSSL::ASN1.#decode_all を用います。逆に、OpenSSL::ASN1::ASN1Data のオブジェクトを DER 形式の文字列に変換するには、OpenSSL::ASN1::ASN1Data#to_derを用います。
クラス階層
OpenSSL::ASN1::ASN1Data +-> OpenSSL::ASN1::Primitive | +-> OpenSSL::ASN1::Boolean | +-> OpenSSL::ASN1::Integer | +-> OpenSSL::ASN1::Enumerated | +-> OpenSSL::ASN1::BitString | +-> OpenSSL::ASN1::OctetString | +-> OpenSSL::ASN1::UTF8String | +-> OpenSSL::ASN1::NumericString | +-> OpenSSL::ASN1::PrintableString | +-> OpenSSL::ASN1::T61String | +-> OpenSSL::ASN1::VideotexString | +-> OpenSSL::ASN1::IA5String | +-> OpenSSL::ASN1::GraphicString | +-> OpenSSL::ASN1::ISO64String | +-> OpenSSL::ASN1::GeneralString | +-> OpenSSL::ASN1::UniversalString | +-> OpenSSL::ASN1::BMPString | +-> OpenSSL::ASN1::Null | +-> OpenSSL::ASN1::ObjectId | +-> OpenSSL::ASN1::UTCTime | `-> OpenSSL::ASN1::GeneralizedTime `-> OpenSSL::ASN1::Constructive +-> OpenSSL::ASN1::Set `-> OpenSSL::ASN1::Sequence
参照
- ITU-T Rec. X.680-699 https://www.itu.int/itu-t/recommendations/index.aspx?ser=X
目次
- モジュール関数
- 定数
-
- BIT_STRING
- BMPSTRING
- BOOLEAN
- CHARACTER_STRING
- EMBEDDED_PDV
- ENUMERATED
- EOC
- EXTERNAL
- GENERALIZEDTIME
- GENERALSTRING
- GRAPHICSTRING
- IA5STRING
- INTEGER
- ISO64STRING
- NULL
- NUMERICSTRING
- OBJECT
- OBJECT_DESCRIPTOR
- OCTET_STRING
- PRINTABLESTRING
- REAL
- RELATIVE_OID
- SEQUENCE
- SET
- T61STRING
- UNIVERSAL_TAG_NAME
- UNIVERSALSTRING
- UTCTIME
- UTF8STRING
- VIDEOTEXSTRING
モジュール関数
BMPString(value) -> OpenSSL::ASN1::BMPString -> OpenSSL::ASN1::BMPString
[permalink][rdoc][edit]BMPString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::BMPString
-
ASN.1 の BMPString 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::BMPString.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(文字列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
BitString(value) -> OpenSSL::ASN1::BitString -> OpenSSL::ASN1::BitString
[permalink][rdoc][edit]BitString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::BitString
-
ASN.1 の BitString 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::BitString.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(文字列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
Boolean(value) -> OpenSSL::ASN1::Boolean
[permalink][rdoc][edit]Boolean(value , tag , tagging , tag_class) -> OpenSSL::ASN1::Boolean
-
ASN.1 の Boolean 型の値を表現する OpenSSL::ASN1::Boolean オブジェクトを生成します。
OpenSSL::ASN::Boolean.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(true もしくは false)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
Enumerated(value) -> OpenSSL::ASN1::Enumerated
[permalink][rdoc][edit]Enumerated(value, tag, tagging, tag_class) -> OpenSSL::ASN1::Enumerated
-
ASN.1 の Enumerated 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::Enumerated.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(0以上の整数)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
GeneralString(value) -> OpenSSL::ASN1::GeneralString -> OpenSSL::ASN1::GeneralString
[permalink][rdoc][edit]GeneralString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::GeneralString
-
ASN.1 の GeneralString 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::GeneralString.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(文字列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
GeneralizedTime(value) -> OpenSSL::ASN1::GeneralizedTime -> OpenSSL::ASN1::GeneralizedTime
[permalink][rdoc][edit]GeneralizedTime(value, tag, tagging, tag_class) -> OpenSSL::ASN1::GeneralizedTime
-
ASN.1 の GeneralizedTime 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::GeneralizedTime.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(Timeのオブジェクト)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
GraphicString(value) -> OpenSSL::ASN1::GraphicString -> OpenSSL::ASN1::GraphicString
[permalink][rdoc][edit]GraphicString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::GraphicString
-
ASN.1 の GraphicString 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::GraphicString.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(文字列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
IA5String(value) -> OpenSSL::ASN1::IA5String -> OpenSSL::ASN1::IA5String
[permalink][rdoc][edit]IA5String(value, tag, tagging, tag_class) -> OpenSSL::ASN1::IA5String
-
ASN.1 の IA5String 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::IA5String.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(文字列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
ISO64String(value) -> OpenSSL::ASN1::ISO64String -> OpenSSL::ASN1::ISO64String
[permalink][rdoc][edit]ISO64String(value, tag, tagging, tag_class) -> OpenSSL::ASN1::ISO64String
-
ASN.1 の ISO64String 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::ISO64String.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(文字列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
Integer(value) -> OpenSSL::ASN1::Integer
[permalink][rdoc][edit]Integer(value, tag, tagging, tag_class) -> OpenSSL::ASN1::Integer
-
ASN.1 の Integer 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::Integer.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(OpenSSL::BNのインスタンス)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
Null(value) -> OpenSSL::ASN1::Null -> OpenSSL::ASN1::Null
[permalink][rdoc][edit]Null(value, tag, tagging, tag_class) -> OpenSSL::ASN1::Null
-
ASN.1 の Null 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::Null.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(nilのみ)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
NumericString(value) -> OpenSSL::ASN1::NumericString -> OpenSSL::ASN1::NumericString
[permalink][rdoc][edit]NumericString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::NumericString
-
ASN.1 の NumericString 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::NumericString.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(文字列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
ObjectId(value) -> OpenSSL::ASN1::ObjectId -> OpenSSL::ASN1::ObjectId
[permalink][rdoc][edit]ObjectId(value, tag, tagging, tag_class) -> OpenSSL::ASN1::ObjectId
-
ASN.1 の ObjectId 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::ObjectId.new と同じです。
- [PARAM] value:
- ASN.1 オブジェクト識別子を表す文字列
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
OctetString(value) -> OpenSSL::ASN1::OctetString -> OpenSSL::ASN1::OctetString
[permalink][rdoc][edit]OctetString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::OctetString
-
ASN.1 の OctetString 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::OctetString.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(文字列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
PrintableString(value) -> OpenSSL::ASN1::PrintableString -> OpenSSL::ASN1::PrintableString
[permalink][rdoc][edit]PrintableString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::PrintableString
-
ASN.1 の PrintableString 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::PrintableString.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(文字列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
Sequence(value) -> OpenSSL::ASN1::Sequence -> OpenSSL::ASN1::Sequence
[permalink][rdoc][edit]Sequence(value, tag, tagging, tag_class) -> OpenSSL::ASN1::Sequence
-
ASN.1 の Sequence 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::Sequence.new と同じです。
- [PARAM] value:
- ASN.1値を表すRubyのオブジェクト(OpenSSL::ASN1::ASN1Dataの配列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
Set(value) -> OpenSSL::ASN1::Set -> OpenSSL::ASN1::Set
[permalink][rdoc][edit]Set(value, tag, tagging, tag_class) -> OpenSSL::ASN1::Set
-
ASN.1 の Set 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::Set.new と同じです。
- [PARAM] value:
- ASN.1値を表すRubyのオブジェクト(OpenSSL::ASN1::ASN1Dataの配列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
T61String(value) -> OpenSSL::ASN1::T61String -> OpenSSL::ASN1::T61String
[permalink][rdoc][edit]T61String(value, tag, tagging, tag_class) -> OpenSSL::ASN1::T61String
-
ASN.1 の T61String 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::T61String.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(文字列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
UTCTime(value) -> OpenSSL::ASN1::UTCTime -> OpenSSL::ASN1::UTCTime
[permalink][rdoc][edit]UTCTime(value, tag, tagging, tag_class) -> OpenSSL::ASN1::UTCTime
-
ASN.1 の UTCTime 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::UTCTime.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(Timeのオブジェクト)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
UTF8String(value) -> OpenSSL::ASN1::UTF8String -> OpenSSL::ASN1::UTF8String
[permalink][rdoc][edit]UTF8String(value, tag, tagging, tag_class) -> OpenSSL::ASN1::UTF8String
-
ASN.1 の UTF8String 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::UTF8String.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(文字列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
UniversalString(value) -> OpenSSL::ASN1::UniversalString -> OpenSSL::ASN1::UniversalString
[permalink][rdoc][edit]UniversalString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::UniversalString
-
ASN.1 の UniversalString 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::UniversalString.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(文字列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
VideotexString(value) -> OpenSSL::ASN1::VideotexString -> OpenSSL::ASN1::VideotexString
[permalink][rdoc][edit]VideotexString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::VideotexString
-
ASN.1 の VideotexString 型の値を表現する Ruby のオブジェクトを生成します。
OpenSSL::ASN1::VideotexString.new と同じです。
- [PARAM] value:
- ASN.1 値を表す Ruby のオブジェクト(文字列)
- [PARAM] tag:
- タグ番号
- [PARAM] tagging:
- タグ付けの方法(:IMPLICIT もしくは :EXPLICIT)
- [PARAM] tag_class:
- タグクラス(:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
decode(der) -> OpenSSL::ASN1::ASN1Data
[permalink][rdoc][edit]-
DER 表現の文字列を解析し、そこにエンコードされている ASN.1 の値を OpenSSL::ASN1::ASN1Data のサブクラスのインスタンスとして返します。
複数の ASN.1 の値が含まれている場合、先頭の値だけを返します。
ASN.1 オブジェクトが Constructive である場合は、それを構成する要素も再帰的に解析します。
例:
ruby -e ' require "openssl" require "pp" pem = File.read(ARGV[0]) cert = OpenSSL::X509::Certificate.new(pem) pp OpenSSL::ASN1.decode(cert.to_der) ' mycert.pem #<OpenSSL::ASN1::Sequence:0x814e9fc @tag=16, @tag_class=:UNIVERSAL, @tagging=nil, @value= [#<OpenSSL::ASN1::Sequence:0x814ead8 @tag=16, @tag_class=:UNIVERSAL, @tagging=nil, @value= [#<OpenSSL::ASN1::ASN1Data:0x814f690 @tag=0, @tag_class=:CONTEXT_SPECIFIC, @value= [#<OpenSSL::ASN1::Integer:0x814f6a4 @tag=2, @tag_class=:UNIVERSAL, @tagging=nil, @value=2>]>, ...
- [PARAM] der:
- DER形式の文字列
- [EXCEPTION] OpenSSL::ASN1::ASN1Error:
- 解析に失敗した場合に発生します
decode_all(der) -> [OpenSSL::ASN1::ASN1Data]
[permalink][rdoc][edit]-
DER 表現の文字列を解析し、そこにエンコードされている ASN.1 の値を全て OpenSSL::ASN1::ASN1Data のサブクラスのインスタンスの配列として返します。
- [PARAM] der:
- DER形式の文字列
- [EXCEPTION] OpenSSL::ASN1::ASN1Error:
- 解析に失敗した場合に発生します
[SEE_ALSO] OpenSSL::ASN1.#decode
traverse(der) {|depth, off, hlen, len, constructed, tag_class, tag| ...} -> nil
[permalink][rdoc][edit]-
DER形式の文字列を解析し、そこに含まれる ASN.1 の値のプロパティを引数として与えられたブロックを呼びだします。
OpenSSL::ASN1.#decode_all のように、文字列に含まれる全ての ASN.1 オブジェクトのインスタンスを解析します。
ブロックに渡される引数は以下の通りです。
- depth: 再帰の深さ
- off: 対象の値をエンコードした文字列の der の先頭からのオフセット
- hlen: エンコードされたデータのヘッダのバイト数
- len: エンコードされたデータの値フィールドのバイト数
- constructed:対象の ASN.1 値が Constructive なら真
- tag_class: タグクラスを表す Symbol オブジェクト (:UNIVERSAL, :CONTEXT_SPECIFIC, :APPLICATION, :PRIVATE のいずれか)
- tag: タグ番号
- [PARAM] der:
- DER形式の文字列
- [EXCEPTION] OpenSSL::ASN1::ASN1Error:
- 解析に失敗した場合に発生します
[SEE_ALSO] OpenSSL::ASN1.#decode
定数
BIT_STRING -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 BIT_STRING のタグ番号 3 を表す定数です。
BMPSTRING -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 BMPSTRING のタグ番号 30 を表す定数です。
BOOLEAN -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 BOOLEAN のタグ番号 1 を表す定数です。
CHARACTER_STRING -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 CHARACTER_STRING のタグ番号 29 を表す定数です。
EMBEDDED_PDV -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 EMBEDDED_PDV のタグ番号 11 を表す定数です。
ENUMERATED -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 ENUMERATED のタグ番号 10 を表す定数です。
EOC -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 EOC のタグ番号 0 を表す定数です。
EXTERNAL -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 EXTERNAL のタグ番号 8 を表す定数です。
GENERALIZEDTIME -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 GENERALIZEDTIME のタグ番号 24 を表す定数です。
GENERALSTRING -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 GENERALSTRING のタグ番号 27 を表す定数です。
GRAPHICSTRING -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 GRAPHICSTRING のタグ番号 25 を表す定数です。
IA5STRING -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 IA5STRING のタグ番号 22 を表す定数です。
INTEGER -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 INTEGER のタグ番号 2 を表す定数です。
ISO64STRING -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 ISO64STRING のタグ番号 26 を表す定数です。
NULL -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 NULL のタグ番号 5 を表す定数です。
NUMERICSTRING -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 NUMERICSTRING のタグ番号 18 を表す定数です。
OBJECT -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 OBJECT のタグ番号 6 を表す定数です。
OBJECT_DESCRIPTOR -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 OBJECT_DESCRIPTOR のタグ番号 7 を表す定数です。
OCTET_STRING -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 OCTET_STRING のタグ番号 4 を表す定数です。
PRINTABLESTRING -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 PRINTABLESTRING のタグ番号 19 を表す定数です。
REAL -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 REAL のタグ番号 9 を表す定数です。
RELATIVE_OID -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 RELATIVE_OID のタグ番号 13 を表す定数です。
SEQUENCE -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 SEQUENCE のタグ番号 16 を表す定数です。
SET -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 SET のタグ番号 17 を表す定数です。
T61STRING -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 T61STRING のタグ番号 20 を表す定数です。
UNIVERSALSTRING -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 UNIVERSALSTRING のタグ番号 28 を表す定数です。
UNIVERSAL_TAG_NAME -> [String]
[permalink][rdoc][edit]-
タグ番号が表す ASN.1 オブジェクト名を収録した配列です。
例:
require 'openssl' p OpenSSL::ASN1::UNIVERSAL_TAG_NAME[0] # => "EOC" p OpenSSL::ASN1::UNIVERSAL_TAG_NAME[12] # => "UTF8STRING"
ASN.1 オブジェクトのタグ番号を表す定数が以下のように定義されています。
require 'openssl' p OpenSSL::ASN1::UTF8STRING # => 12
UTCTIME -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 UTCTIME のタグ番号 23 を表す定数です。
UTF8STRING -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 UTF8STRING のタグ番号 12 を表す定数です。
VIDEOTEXSTRING -> Integer
[permalink][rdoc][edit]-
ASN.1 UNIVERSAL タグの、 VIDEOTEXSTRING のタグ番号 21 を表す定数です。