Ruby 2.5.0 リファレンスマニュアル > ライブラリ一覧 > 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 なタグ付けを実現することもできます。

例:

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

参照

モジュール関数

定義 説明
BMPString(value) -> OpenSSL::ASN1::BMPString -> OpenSSL::ASN1::BMPString
BMPString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::BMPString

ASN.1 の BMPString 型の値を表現する Ruby のオブジェクトを生成します。

BitString(value) -> OpenSSL::ASN1::BitString -> OpenSSL::ASN1::BitString
BitString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::BitString

ASN.1 の BitString 型の値を表現する Ruby のオブジェクトを生成します。

Boolean(value) -> OpenSSL::ASN1::Boolean
Boolean(value , tag , tagging , tag_class) -> OpenSSL::ASN1::Boolean

ASN.1 の Boolean 型の値を表現する OpenSSL::ASN1::Boolean オブジェクトを生成します。

Enumerated(value) -> OpenSSL::ASN1::Enumerated
Enumerated(value, tag, tagging, tag_class) -> OpenSSL::ASN1::Enumerated

ASN.1 の Enumerated 型の値を表現する Ruby のオブジェクトを生成します。

GeneralString(value) -> OpenSSL::ASN1::GeneralString -> OpenSSL::ASN1::GeneralString
GeneralString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::GeneralString

ASN.1 の GeneralString 型の値を表現する Ruby のオブジェクトを生成します。

GeneralizedTime(value) -> OpenSSL::ASN1::GeneralizedTime -> OpenSSL::ASN1::GeneralizedTime
GeneralizedTime(value, tag, tagging, tag_class) -> OpenSSL::ASN1::GeneralizedTime

ASN.1 の GeneralizedTime 型の値を表現する Ruby のオブジェクトを生成します。

GraphicString(value) -> OpenSSL::ASN1::GraphicString -> OpenSSL::ASN1::GraphicString
GraphicString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::GraphicString

ASN.1 の GraphicString 型の値を表現する Ruby のオブジェクトを生成します。

IA5String(value) -> OpenSSL::ASN1::IA5String -> OpenSSL::ASN1::IA5String
IA5String(value, tag, tagging, tag_class) -> OpenSSL::ASN1::IA5String

ASN.1 の IA5String 型の値を表現する Ruby のオブジェクトを生成します。

ISO64String(value) -> OpenSSL::ASN1::ISO64String -> OpenSSL::ASN1::ISO64String
ISO64String(value, tag, tagging, tag_class) -> OpenSSL::ASN1::ISO64String

ASN.1 の ISO64String 型の値を表現する Ruby のオブジェクトを生成します。

Integer(value) -> OpenSSL::ASN1::Integer
Integer(value, tag, tagging, tag_class) -> OpenSSL::ASN1::Integer

ASN.1 の Integer 型の値を表現する Ruby のオブジェクトを生成します。

Null(value) -> OpenSSL::ASN1::Null -> OpenSSL::ASN1::Null
Null(value, tag, tagging, tag_class) -> OpenSSL::ASN1::Null

ASN.1 の Null 型の値を表現する Ruby のオブジェクトを生成します。

NumericString(value) -> OpenSSL::ASN1::NumericString -> OpenSSL::ASN1::NumericString
NumericString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::NumericString

ASN.1 の NumericString 型の値を表現する Ruby のオブジェクトを生成します。

ObjectId(value) -> OpenSSL::ASN1::ObjectId -> OpenSSL::ASN1::ObjectId
ObjectId(value, tag, tagging, tag_class) -> OpenSSL::ASN1::ObjectId

ASN.1 の ObjectId 型の値を表現する Ruby のオブジェクトを生成します。

OctetString(value) -> OpenSSL::ASN1::OctetString -> OpenSSL::ASN1::OctetString
OctetString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::OctetString

ASN.1 の OctetString 型の値を表現する Ruby のオブジェクトを生成します。

PrintableString(value) -> OpenSSL::ASN1::PrintableString -> OpenSSL::ASN1::PrintableString
PrintableString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::PrintableString

ASN.1 の PrintableString 型の値を表現する Ruby のオブジェクトを生成します。

Sequence(value) -> OpenSSL::ASN1::Sequence -> OpenSSL::ASN1::Sequence
Sequence(value, tag, tagging, tag_class) -> OpenSSL::ASN1::Sequence

ASN.1 の Sequence 型の値を表現する Ruby のオブジェクトを生成します。

Set(value) -> OpenSSL::ASN1::Set -> OpenSSL::ASN1::Set
Set(value, tag, tagging, tag_class) -> OpenSSL::ASN1::Set

ASN.1 の Set 型の値を表現する Ruby のオブジェクトを生成します。

T61String(value) -> OpenSSL::ASN1::T61String -> OpenSSL::ASN1::T61String
T61String(value, tag, tagging, tag_class) -> OpenSSL::ASN1::T61String

ASN.1 の T61String 型の値を表現する Ruby のオブジェクトを生成します。

UTCTime(value) -> OpenSSL::ASN1::UTCTime -> OpenSSL::ASN1::UTCTime
UTCTime(value, tag, tagging, tag_class) -> OpenSSL::ASN1::UTCTime

ASN.1 の UTCTime 型の値を表現する Ruby のオブジェクトを生成します。

UTF8String(value) -> OpenSSL::ASN1::UTF8String -> OpenSSL::ASN1::UTF8String
UTF8String(value, tag, tagging, tag_class) -> OpenSSL::ASN1::UTF8String

ASN.1 の UTF8String 型の値を表現する Ruby のオブジェクトを生成します。

UniversalString(value) -> OpenSSL::ASN1::UniversalString -> OpenSSL::ASN1::UniversalString
UniversalString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::UniversalString

ASN.1 の UniversalString 型の値を表現する Ruby のオブジェクトを生成します。

VideotexString(value) -> OpenSSL::ASN1::VideotexString -> OpenSSL::ASN1::VideotexString
VideotexString(value, tag, tagging, tag_class) -> OpenSSL::ASN1::VideotexString

ASN.1 の VideotexString 型の値を表現する Ruby のオブジェクトを生成します。

decode(der) -> OpenSSL::ASN1::ASN1Data

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

decode_all(der) -> [OpenSSL::ASN1::ASN1Data]

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

traverse(der) {|depth, off, hlen, len, constructed, tag_class, tag| ...} -> nil

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

定数

定義 説明
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 を表す定数です。