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::Request、OpenSSL::X509::CRL オブジェクトを渡すことによって、拡張領域の中身を ExtensionFactory オブジェクトが計算することができます。例えば、"subjectKeyIdentifier" 拡張領域は証明書の一部のハッシュ値を値として持ちますが、 OpenSSL::X509::Certificate オブジェクトをあらかじめ渡しておくことによって OpenSSL::X509::ExtensionFactory#create_extension がその値を計算します。これらの情報が必要ない場合は nil を渡します。
以下のメソッドによってオブジェクト生成後に証明書オブジェクト等を設定することができます。
config -> OpenSSL::Config
[permalink][rdoc]自身に設定されているコンフィグファイルオブジェクトを設定します。
config=(config)
[permalink][rdoc]自身にコンフィグファイルオブジェクトを設定します。
例
require 'openssl' factory.config = OpenSSL::Config.load(OpenSSL::Config::DEFAULT_CONFIG_FILE)
create_ext(oid, value, critical = false) -> OpenSSL::X509::Extension
[permalink][rdoc]OpenSSL::X509::Extension のインスタンスを生成して返します。
create_ext_from_array(ary) -> OpenSSL::X509::Extension
[permalink][rdoc][oid, value, critical] もしくは [oid, value] という配列から OpenSSL::X509::Extension オブジェクトを生成します。
[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 が渡されるのと同じになります。
[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" という形式である必要があります。
[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_array、 OpenSSL::X509::ExtensionFactory#create_ext_from_hash、 OpenSSL::X509::ExtensionFactory#create_ext_from_string、がそれぞれ呼びだされてオブジェクトを生成します。
引数が2個以上である場合は、 OpenSSL::X509::ExtensionFactory#create_ext が呼びだされてオブジェクトを生成します。
crl -> OpenSSL::X509::CRL | nil
[permalink][rdoc]自身に設定された証明書失効リストオブジェクトを返します。
設定されていない場合は nil を返します。
crl=(crl)
[permalink][rdoc]自身に証明書失効リストオブジェクトを設定します。
[SEE_ALSO] OpenSSL::X509::ExtensionFactory.new
issuer_certificate -> OpenSSL::X509::Certificate | nil
[permalink][rdoc]自身に設定されている発行者(issuer)の証明書オブジェクトを返します。
証明書が設定されていない場合は nil を返します。
issuer_certificate=(cert)
[permalink][rdoc]自身に発行者(issuer)の証明書オブジェクトを設定します。
[SEE_ALSO] OpenSSL::X509::ExtensionFactory.new
subject_certificate -> OpenSSL::X509::Certificate | nil
[permalink][rdoc]自身に設定されている所有者(subject)の証明書オブジェクトを返します。
証明書が設定されていない場合は nil を返します。
subject_certificate=(name)
[permalink][rdoc]自身に所有者(subject)の証明書オブジェクトを設定します。
[SEE_ALSO] OpenSSL::X509::ExtensionFactory.new
subject_request -> OpenSSL::X509::Request | nil
[permalink][rdoc]自身に設定されている証明書署名要求オブジェクトを返します。
設定されていない場合は nil を返します。
subject_request=(req)
[permalink][rdoc]自身に証明書署名要求オブジェクトを設定します。
[SEE_ALSO] OpenSSL::X509::ExtensionFactory.new