Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > opensslライブラリ > OpenSSL::ASN1モジュール

module 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::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 http://www.itu.int/itu-t/recommendations/index.aspx?ser=X

目次

モジュール関数
BMPString BitString Boolean Enumerated GeneralString GeneralizedTime GraphicString IA5String ISO64String Integer Null NumericString ObjectId OctetString PrintableString Sequence Set T61String UTCTime UTF8String UniversalString VideotexString decode decode_all traverse
定数
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 UNIVERSALSTRING UNIVERSAL_TAG_NAME UTCTIME UTF8STRING VIDEOTEXSTRING

モジュール関数

BMPString(value) -> OpenSSL::ASN1::BMPString -> OpenSSL::ASN1::BMPString[permalink][rdoc]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]

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::ASN1Error:
解析に失敗した場合に発生します
decode_all(der) -> [OpenSSL::ASN1::ASN1Data][permalink][rdoc]

DER 表現の文字列を解析し、そこにエンコードされている ASN.1 の値を全て OpenSSL::ASN1::ASN1Data のサブクラスのインスタンスの配列として 返します。

[PARAM] der:
DER形式の文字列
[EXCEPTION] OpenSSL::ASN1Error:
解析に失敗した場合に発生します

[SEE_ALSO] OpenSSl::ASN1.#decode

traverse(der) {|depth, off, hlen, len, constructed, tag_class, tag| ...} -> Qnil[permalink][rdoc]

DER形式の文字列を解析し、そこに含まれる ASN.1 の値 のプロパティを引数として与えられたブロックを呼びだします。

OpenSSL::ASN1.#decode_all のように、文字列に含まれる 全ての ASN.1 オブジェクトのインスタンスを解析します。

ブロックに渡される引数は以下の通りです。

[PARAM] der:
DER形式の文字列
[EXCEPTION] OpenSSL::ASN1Error:
解析に失敗した場合に発生します

[SEE_ALSO] OpenSSl::ASN1.#decode

定数

BIT_STRING -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 BIT_STRING のタグ番号 3 を表す定数です。

BMPSTRING -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 BMPSTRING のタグ番号 30 を表す定数です。

BOOLEAN -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 BOOLEAN のタグ番号 1 を表す定数です。

CHARACTER_STRING -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 CHARACTER_STRING のタグ番号 29 を表す定数です。

EMBEDDED_PDV -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 EMBEDDED_PDV のタグ番号 11 を表す定数です。

ENUMERATED -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 ENUMERATED のタグ番号 10 を表す定数です。

EOC -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 EOC のタグ番号 0 を表す定数です。

EXTERNAL -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 EXTERNAL のタグ番号 8 を表す定数です。

GENERALIZEDTIME -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 GENERALIZEDTIME のタグ番号 24 を表す定数です。

GENERALSTRING -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 GENERALSTRING のタグ番号 27 を表す定数です。

GRAPHICSTRING -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 GRAPHICSTRING のタグ番号 25 を表す定数です。

IA5STRING -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 IA5STRING のタグ番号 22 を表す定数です。

INTEGER -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 INTEGER のタグ番号 2 を表す定数です。

ISO64STRING -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 ISO64STRING のタグ番号 26 を表す定数です。

NULL -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 NULL のタグ番号 5 を表す定数です。

NUMERICSTRING -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 NUMERICSTRING のタグ番号 18 を表す定数です。

OBJECT -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 OBJECT のタグ番号 6 を表す定数です。

OBJECT_DESCRIPTOR -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 OBJECT_DESCRIPTOR のタグ番号 7 を表す定数です。

OCTET_STRING -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 OCTET_STRING のタグ番号 4 を表す定数です。

PRINTABLESTRING -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 PRINTABLESTRING のタグ番号 19 を表す定数です。

REAL -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 REAL のタグ番号 9 を表す定数です。

RELATIVE_OID -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 RELATIVE_OID のタグ番号 13 を表す定数です。

SEQUENCE -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 SEQUENCE のタグ番号 16 を表す定数です。

SET -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 SET のタグ番号 17 を表す定数です。

T61STRING -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 T61STRING のタグ番号 20 を表す定数です。

UNIVERSALSTRING -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 UNIVERSALSTRING のタグ番号 28 を表す定数です。

UNIVERSAL_TAG_NAME -> [String][permalink][rdoc]

タグ番号が表す 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]

ASN.1 UNIVERSAL タグの、 UTCTIME のタグ番号 23 を表す定数です。

UTF8STRING -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 UTF8STRING のタグ番号 12 を表す定数です。

VIDEOTEXSTRING -> Integer[permalink][rdoc]

ASN.1 UNIVERSAL タグの、 VIDEOTEXSTRING のタグ番号 21 を表す定数です。