class OpenSSL::X509::ExtensionFactory

要約

OpenSSL::X509::Extension を簡便に生成するためのクラスです。

require 'openssl'
# ca_cert: CA の証明書オブジェクト
# req: CSR オブジェクト
# newcert: 新たに生成する証明書のオブジェクト
ca_cert = OpenSSL::X509::Certificate.new(File.read('ca_cert.pem'))
req = OpenSSL::X509::Request.new(File.read('req.pem'))
newcert = OpenSSL::X509::Certificate.new
# 新しい ExtensionFactory オブジェクトを生成し、 CA の証明書オブジェクト
# を設定
factory = OpenSSL::X509::ExtensionFactory.new(ca_cert)
# CSR オブジェクトを設定
factory.subject_request = req
# basicConstraints 拡張領域を生成
p factory.create_extension("basicConstraints", "CA:FALSE")
# => basicConstraints = CA:FALSE

# subjectKeyIdentifier 拡張領域を生成
# この値は CSR オブジェクトの公開鍵から生成される
p factory.create_extension("subjectKeyIdentifier", "hash")
# => subjectKeyIdentifier = 99:E7:A1:.....

# authorityKeyIdentifier 拡張領域を生成
# この値は CA の証明書オブジェクトから生成される
p factory.create_extension("authorityKeyIdentifier", "keyid,issuer:always")
# => authorityKeyIdentifier = keyid:D1:AB:87:....

# 生成した拡張領域オブジェクトを証明書の拡張領域に追加
newcert.add_extension(factory.create_extension("basicConstraints", "CA:FALSE"))

目次

特異メソッド
インスタンスメソッド

特異メソッド

new(issuer_cert=nil, subject_cert=nil, subject_req=nil, crl=nil) -> OpenSSL::X509::ExtensionFactory[permalink][rdoc]

ExtensionFactory オブジェクトを生成します。

証明書の発行者や所有者の OpenSSL::X509::Certificate オブジェクトや OpenSSL::X509::RequestOpenSSL::X509::CRL オブジェクトを渡すことによって、拡張領域の中身を ExtensionFactory オブジェクトが計算することができます。例えば、"subjectKeyIdentifier" 拡張領域は証明書の一部のハッシュ値を値として持ちますが、 OpenSSL::X509::Certificate オブジェクトをあらかじめ渡しておくことによって OpenSSL::X509::ExtensionFactory#create_extension がその値を計算します。これらの情報が必要ない場合は nil を渡します。

以下のメソッドによってオブジェクト生成後に証明書オブジェクト等を設定することができます。

[PARAM] issuer_cert:
証明書発行者、すなわち CA の OpenSSL::X509::Certificate オブジェクト
[PARAM] subject_cert:
証明書所有者の OpenSSL::X509::Certificate オブジェクト
[PARAM] subject_req:
関連する証明書署名要求(OpenSSL::X509::Request) オブジェクト
[PARAM] crl:
関連する 証明書失効リスト(OpenSSL::X509::CRL)オブジェクト

インスタンスメソッド

config -> OpenSSL::Config[permalink][rdoc]

自身に設定されているコンフィグファイルオブジェクトを設定します。

config=(config)[permalink][rdoc]

自身にコンフィグファイルオブジェクトを設定します。

require 'openssl'
factory.config = OpenSSL::Config.load(OpenSSL::Config::DEFAULT_CONFIG_FILE)
[PARAM] config:
設定ファイル(OpenSSL::Config オブジェクト)
create_ext(oid, value, critical = false) -> OpenSSL::X509::Extension[permalink][rdoc]

OpenSSL::X509::Extension のインスタンスを生成して返します。

[PARAM] oid:
拡張領域の識別子を表す文字列
[PARAM] value:
拡張領域の値を表す文字列
[PARAM] critical:
重要度(真偽値)
create_ext_from_array(ary) -> OpenSSL::X509::Extension[permalink][rdoc]

[oid, value, critical] もしくは [oid, value] という配列から OpenSSL::X509::Extension オブジェクトを生成します。

[PARAM] ary:
生成する拡張領域のデータの配列

[SEE_ALSO] OpenSSL::X509::ExtensionFactory#create_ext

create_ext_from_hash(hash) -> OpenSSL::X509::Extension[permalink][rdoc]

ハッシュから OpenSSL::X509::Extension オブジェクトを生成します。

渡すハッシュテーブルは

{"oid" => OID文字列, "value" => value文字列, "critical" => 真偽値 }

という内容が必要です。"critical" を省略した場合は false が渡されるのと同じになります。

[PARAM] hash:
生成する拡張領域のデータのハッシュテーブル

[SEE_ALSO] OpenSSL::X509::ExtensionFactory#create_ext

create_ext_from_string(str) -> OpenSSL::X509::Extension[permalink][rdoc]

文字列から OpenSSL::X509::Extension オブジェクトを生成します。

文字列は "oid = value" もしくは "oid = critical, value" という形式である必要があります。

[PARAM] str:
生成する拡張領域のデータの文字列

[SEE_ALSO] OpenSSL::X509::ExtensionFactory#create_ext

create_extension(obj) -> OpenSSL::X509::Extension[permalink][rdoc]
create_extension(oid, value, critical=false) -> OpenSSL::X509::Extension

OpenSSL::X509::Extension のインスタンスを生成して返します。

引数の個数が1個である場合、それが配列、ハッシュ、文字列のいずれかであるならば、 OpenSSL::X509::ExtensionFactory#create_ext_from_arrayOpenSSL::X509::ExtensionFactory#create_ext_from_hashOpenSSL::X509::ExtensionFactory#create_ext_from_string、がそれぞれ呼びだされてオブジェクトを生成します。

引数が2個以上である場合は、 OpenSSL::X509::ExtensionFactory#create_ext が呼びだされてオブジェクトを生成します。

[PARAM] obj:
拡張領域のデータ。配列、ハッシュ、文字列のいずれか
[PARAM] oid:
拡張領域の識別子を表す文字列
[PARAM] value:
拡張領域の値を表す文字列
[PARAM] critical:
重要度(真偽値)
crl -> OpenSSL::X509::CRL | nil[permalink][rdoc]

自身に設定された証明書失効リストオブジェクトを返します。

設定されていない場合は nil を返します。

crl=(crl)[permalink][rdoc]

自身に証明書失効リストオブジェクトを設定します。

[PARAM] crl:
設定する証明書失効リスト(OpenSSL::X509::CRL)オブジェクト

[SEE_ALSO] OpenSSL::X509::ExtensionFactory.new

issuer_certificate -> OpenSSL::X509::Certificate | nil[permalink][rdoc]

自身に設定されている発行者(issuer)の証明書オブジェクトを返します。

証明書が設定されていない場合は nil を返します。

issuer_certificate=(cert)[permalink][rdoc]

自身に発行者(issuer)の証明書オブジェクトを設定します。

[PARAM] cert:
設定する証明書(OpenSSL::X509::Certificate)オブジェクト

[SEE_ALSO] OpenSSL::X509::ExtensionFactory.new

subject_certificate -> OpenSSL::X509::Certificate | nil[permalink][rdoc]

自身に設定されている所有者(subject)の証明書オブジェクトを返します。

証明書が設定されていない場合は nil を返します。

subject_certificate=(name)[permalink][rdoc]

自身に所有者(subject)の証明書オブジェクトを設定します。

[PARAM] cert:
設定する証明書(OpenSSL::X509::Certificate)オブジェクト

[SEE_ALSO] OpenSSL::X509::ExtensionFactory.new

subject_request -> OpenSSL::X509::Request | nil[permalink][rdoc]

自身に設定されている証明書署名要求オブジェクトを返します。

設定されていない場合は nil を返します。

subject_request=(req)[permalink][rdoc]

自身に証明書署名要求オブジェクトを設定します。

[PARAM] req:
設定する証明書署名要求(OpenSSL::X509::Request)オブジェクト

[SEE_ALSO] OpenSSL::X509::ExtensionFactory.new