library drb/ssl

[edit]

要約

DRb のプロトコルとして SSL/TLS 上で通信する drbssl が使えるようになります。

require 'drb/ssl'
obj = ''
DRb::DRbServer.new( 'drbssl://localhost:10000',
                    obj,
                    {:SSLCertName => [["CN","fqdn.example.com"]]})

DRb::DRbServer.newDRb.#start_service が "drbssl" スキームを受け入れるようになります。また、DRb::DRbObject.new_with_uri でも drbunix スキームが使えるようになります。

サーバを起動するときは以下のオプションが追加で利用できます。詳しくは、対応するメソッドや OpenSSL::SSL::SSLContext クラス自体のドキュメント、その他 openssl の各種ドキュメントを参照してください。

:SSLCertificate

サーバが自分自身を証明するための証明書を指定します。 OpenSSL::SSL::SSLContext#cert= で利用します。デフォルトは nil (指定なし)です。

:SSLPrivateKey

:SSLCertificate で指定した証明書に添付されている公開鍵に対応する秘密鍵を指定します。 OpenSSL::SSL::SSLContext#key= で利用します。デフォルトは nil (指定なし)です。

:SSLClientCA

クライアント証明書を要求するときにヒント情報として送る CA のリストを指定します。 OpenSSL::SSL::SSLContext#client_ca= で利用します。デフォルトは nil (指定なし)です。

:SSLCACertificatePath

接続相手の証明書の検証のために用いる信頼済みCA証明書ファイルのディレクトリパスを指定します。 OpenSSL::SSL::SSLContext#ca_path= で利用します。デフォルトは nil (指定なし)です。

:SSLCACertificateFile

接続相手の証明書の検証のために用いる信頼済みCA証明書ファイルのパスを指定します。 OpenSSL::SSL::SSLContext#ca_file= で利用します。デフォルトは nil (指定なし)です。

:SSLTmpDhCallback

一時的 DH 鍵を生成するためのコールバックを指定します。 OpenSSL::SSL::SSLContext#tmp_dh_callback= で利用します。デフォルトは nil (指定なし)です。

:SSLVerifyMode

証明書の検証法を指定します。 OpenSSL::SSL::SSLContext#verify_mode= で利用します。デフォルトは OpenSSL::SSL::VERIFY_NONE (検証しない)です。

:SSLVerifyDepth

証明書チェインの検証の最大深さを指定します。 OpenSSL::SSL::SSLContext#verify_depth= で利用します。デフォルトは nil (OpenSSL のデフォルトの深さを利用)です。

:SSLVerifyCallback

検証をフィルタするコールバックを指定します。 OpenSSL::SSL::SSLContext#verify_callback= で利用します。デフォルトは nil です。

:SSLCertificateStore

接続相手の証明書の検証のために使う、信頼している CA 証明書を保持する証明書ストアを指定します。 OpenSSL::SSL::SSLContext#cert_store= で利用します。デフォルトは nil です。

:SSLCertName

:SSLCertificate を省略した場合に生成される証明書の保有者として利用される名前を指定します。生成される証明書は自己署名されているので、証明書の発行者としてもこの名前が利用されます。 OpenSSL::X509::Name.new に渡されるので、 [["CN","fqdn.example.com"]]という形式の配列を渡す必要があります。デフォルトは nil です。

:SSLCertComment

:SSLCertificate を省略した場合に生成される証明書のコメント文字列を指定します。デフォルトは "Generated by Ruby/OpenSSL" です。

オプションで :SSLCertificate と :SSLPrivateKey のペアを指定しなかった場合は openssl を用いて鍵対と自己署名証明書を生成し、それが利用されます。

安全性が必要なく、暗号通信できれば十分であるような場合には :SSLCertificate と :SSLPrivateKey を省略し、:SSLVerifyMode は OpenSSL::SSL::VERIFY_NONE を指定しておけば十分でしょう。

高水準の安全性が必要な場合は drb 以外の選択肢を検討してください。