Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > opensslライブラリ > OpenSSL::ASN1モジュール
クラスの継承リスト: OpenSSL::ASN1
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 なタグ付けを実現することもできます。
例:
# 単純型のデータ 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::Booelan.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 http://www.itu.int/itu-t/recommendations/index.aspx?ser=X
定義 | 説明 | |
---|---|---|
BIT_STRING -> Integer
|
ASN.1 UNIVERSAL タグの、 BIT_STRING のタグ番号 3 を表す定数です。 |
|
BMPSTRING -> Integer
|
ASN.1 UNIVERSAL タグの、 BMPSTRING のタグ番号 30 を表す定数です。 |
|
BOOLEAN -> Integer
|
ASN.1 UNIVERSAL タグの、 BOOLEAN のタグ番号 1 を表す定数です。 |
|
CHARACTER_STRING -> Integer
|
ASN.1 UNIVERSAL タグの、 CHARACTER_STRING のタグ番号 29 を表す定数です。 |
|
EMBEDDED_PDV -> Integer
|
ASN.1 UNIVERSAL タグの、 EMBEDDED_PDV のタグ番号 11 を表す定数です。 |
|
ENUMERATED -> Integer
|
ASN.1 UNIVERSAL タグの、 ENUMERATED のタグ番号 10 を表す定数です。 |
|
EOC -> Integer
|
ASN.1 UNIVERSAL タグの、 EOC のタグ番号 0 を表す定数です。 |
|
EXTERNAL -> Integer
|
ASN.1 UNIVERSAL タグの、 EXTERNAL のタグ番号 8 を表す定数です。 |
|
GENERALIZEDTIME -> Integer
|
ASN.1 UNIVERSAL タグの、 GENERALIZEDTIME のタグ番号 24 を表す定数です。 |
|
GENERALSTRING -> Integer
|
ASN.1 UNIVERSAL タグの、 GENERALSTRING のタグ番号 27 を表す定数です。 |
|
GRAPHICSTRING -> Integer
|
ASN.1 UNIVERSAL タグの、 GRAPHICSTRING のタグ番号 25 を表す定数です。 |
|
IA5STRING -> Integer
|
ASN.1 UNIVERSAL タグの、 IA5STRING のタグ番号 22 を表す定数です。 |
|
INTEGER -> Integer
|
ASN.1 UNIVERSAL タグの、 INTEGER のタグ番号 2 を表す定数です。 |
|
ISO64STRING -> Integer
|
ASN.1 UNIVERSAL タグの、 ISO64STRING のタグ番号 26 を表す定数です。 |
|
NULL -> Integer
|
ASN.1 UNIVERSAL タグの、 NULL のタグ番号 5 を表す定数です。 |
|
NUMERICSTRING -> Integer
|
ASN.1 UNIVERSAL タグの、 NUMERICSTRING のタグ番号 18 を表す定数です。 |
|
OBJECT -> Integer
|
ASN.1 UNIVERSAL タグの、 OBJECT のタグ番号 6 を表す定数です。 |
|
OBJECT_DESCRIPTOR -> Integer
|
ASN.1 UNIVERSAL タグの、 OBJECT_DESCRIPTOR のタグ番号 7 を表す定数です。 |
|
OCTET_STRING -> Integer
|
ASN.1 UNIVERSAL タグの、 OCTET_STRING のタグ番号 4 を表す定数です。 |
|
PRINTABLESTRING -> Integer
|
ASN.1 UNIVERSAL タグの、 PRINTABLESTRING のタグ番号 19 を表す定数です。 |
|
REAL -> Integer
|
ASN.1 UNIVERSAL タグの、 REAL のタグ番号 9 を表す定数です。 |
|
RELATIVE_OID -> Integer
|
ASN.1 UNIVERSAL タグの、 RELATIVE_OID のタグ番号 13 を表す定数です。 |
|
SEQUENCE -> Integer
|
ASN.1 UNIVERSAL タグの、 SEQUENCE のタグ番号 16 を表す定数です。 |
|
SET -> Integer
|
ASN.1 UNIVERSAL タグの、 SET のタグ番号 17 を表す定数です。 |
|
T61STRING -> Integer
|
ASN.1 UNIVERSAL タグの、 T61STRING のタグ番号 20 を表す定数です。 |
|
UNIVERSALSTRING -> Integer
|
ASN.1 UNIVERSAL タグの、 UNIVERSALSTRING のタグ番号 28 を表す定数です。 |
|
UNIVERSAL_TAG_NAME -> [String]
|
タグ番号が表す ASN.1 オブジェクト名を収録した配列です。 |
|
UTCTIME -> Integer
|
ASN.1 UNIVERSAL タグの、 UTCTIME のタグ番号 23 を表す定数です。 |
|
UTF8STRING -> Integer
|
ASN.1 UNIVERSAL タグの、 UTF8STRING のタグ番号 12 を表す定数です。 |
|
VIDEOTEXSTRING -> Integer
|
ASN.1 UNIVERSAL タグの、 VIDEOTEXSTRING のタグ番号 21 を表す定数です。 |