SSL/TLSプロトコルによる暗号通信を行うためのクラスです。
SSL::SSLSocketクラスのインスタンスを作成します。 ioにはIOオブジェクトを指定します。 cert_fileにはX.509証明書ファイル、key_fileは 秘密鍵ファイルのパス名をそれぞれ指定します。 ファイルは共にPEM形式でなければなりません。 証明書ファイルに秘密鍵が含まれる場合はkey_fileの指定は必要 ありません。
SSLSocketクラスの内部に保持しているIOクラスを返します。
PEM形式のX.509証明書ファイルのパスを設定します。
cert_file=で指定したパスを返します。
PEM形式の秘密鍵ファイルのパスを設定します。
key_file=で指定したパスを返します。
Procオブジェクトを指定します。connect(accept)の際に 引数にサーバ(クライアント)から送られたX.509証明書の検証結果、 SSL::X509_STORE_CTXオブジェクトを引数にして呼び出されます。 この手続きの結果によって、ライブラリが行う検証の結果を変更する ことができます。
OpenSSLのs_serverのコール バックルーチンは次のように書き直すことが出来るでしょう。
verify_cb = Proc.new{ |ok, x509_store_ctx| x509 = x509_store_ctx.current_cert unless ok $stderr.print x509_store_ctx.error_message, "\n" if x509_store_ctx.error_depth >= YourSpecifiedDepth ok = true end end case x509_store_ctx.error when SSL::X509::UNABLE_TO_GET_ISSUER_CERT $stderr.print "issuer=#{x509.issuer}\n" when SSL::X509::CERT_NOT_YET_VALID, SSL::X509::ERROR_IN_CERT_NOT_BEFORE_FIELD $stderr.print bio_err,"notBefore=#{x509.notBefore}\n" when SSL::X509::CERT_HAS_EXPIRED, SSL::X509::ERROR_IN_CERT_NOT_AFTER_FIELD $stderr.print(bio_err,"notAfter=#{x509.notAfter}\n" end return(ok); } SSL::SSLSocket.new(s, key, cert) s.verify_mode = SSL::VERIFY_PEER|SSL::VERIFY_FAIL_IF_NO_PEER_CERT ssl.verify_callback = verify_cb
verify_callback=で指定したProcオブジェクトを返します。
connectまたはacceptの際に行われる検証方法を指定します。
または、
の組合せを指定します。詳しくはSSL_CTX_set_verify(3)を参照して下さい。
verify_mode=で指定した値を返します。
検証を行う証明書チェーンの深さの最大値を指定します。
verify_depth=で指定した値を返します。
PEM形式のCA証明書を含むファイルのパスを指定します。このファイルには 複数の証明書を格納することができます。Bourne Shellの場合は次のように して作成することができます。
$ cd /your/ca/certs/dir $ rm CAfile.pem $ for i in *.pem; do > openssl x509 -in $i -text >> CAfile.pem > done
cert_file=で指定したパスを返します。
複数のPEM形式のCA証明書ファイルを含むディレクトリのパスを指定します。 ディレクトリにはCA証明書ファイルのサブジェクトの ハッシュ値をファイル名 に持つシンボリックリンクがあらかじめ作成されている必要があります。 OpenSSLパッケージに含まれるc_rehashユーティリティを利用するとよいでしょう。
$ cd /your/ca/certs/dir $ c_rehash .
cert_file=で指定したパスを返します。
現在のセッションで使用しているX.509証明書から生成したSSL::X509 オブジェクトを返します。
接続先から送られて来たX.509証明書から生成したSSL::X509オブジェクト を返します。
SSLセッションで使用するアルゴリズムを文字列の配列またはコロン区切り テキストで指定することができます。
ciphers=で設定した情報を返します。設定しなくてもデフォルトの値を 取得する事ができます。
現在のセッションで使用している暗号アルゴリズムに関する情報を返します。 情報は配列に格納されており、先頭から順に
を含みます。
SSLセッションの状態を表す文字列を返します。実装上の都合からセッションが 確立した後でのみ有効となります。$VERBOSEがセットされていると長い形式の メッセージを返します。
クライアントとしてSSLセッションを開始します。
サーバとしてSSLセッションを開始します。
SSLセッションを終了します。内部に保持したIOのクローズは行いません。
Socket::sysereadに相当するメソッドです。 到着しているメッセージがsizeに満たない場合はそれ以下の長さの 文字列を返すことがあります。 SSLセッションを開始する前に呼び出した場合は、 newで指定したIOに直接書き込みを行います。
Socket::syswriteに相当するメソッドです。 SSLセッションを開始する前に呼び出した場合は、 newで指定したIOへ直接書き込みます。
X.509証明書から情報を取り出す事を目的としたクラスです。
X509クラスのインスタンスを作成します。 pathはPEM形式のファイルのパスを指定します。
証明書のバージョンを返します。証明書に含まれるバージョン番号は 0からはじまりますが、ここでは実際の数値に1を足したものを返します。
証明書のシリアル番号を返します。
証明書の署名に使われる暗号アルゴリズムを示す文字列を返します。
証明書の発行者情報を返します。
証明書の有効期限を示す文字列を返します。解析にはParseDateモジュール が使用できるでしょう。
証明書の主体者情報を返します。
証明書に含まれる鍵の種類を示す文字列を返します。
証明書の拡張部分を配列形式で返します。各要素は、
を表す文字列を含む配列です。
PEM形式のX.509証明書を返します。
casertに含まれる公開鍵を使用して、証明書を検証します。 casertはSSL::X509オブジェクトまたはPEM形式のファイルへのパスを 指定します。
X509_STORE_CTXをラップするクラスです。SSLSocket#connect、SSLSocket#accept の際に、SSL::SSLScoket#verify_callback=で設定したProcに第2引数として 渡されます。
現在のエラーコードを返します。エラーコードには次のものがあります。
エラーコードに対応したメッセージを返します。
検証中の証明書をSSL::X509オブジェクトにして返します。
現在の証明書チェーンの深さを返します。
IO相当のバッファリング入出力をサポートするためのMix-inモジュー ルです。固定長入出力に、sysread()、syswrite()を使用します。 sysread()はIO#sysread()と同様に、入力ストリームの終りに達したら EOFErrorを投げるようにしなければいけません。また、close()の際に出力 バッファをフラッシュする必要があるため、Buffering#close()はsysclose() を使用します。
現時点でサポートしているメソッドは次の通りです。