SSL サーバーのためのクラス。
TCPServer をラップするクラスで、TCPServer で接続したソケットを OpenSSL::SSL::SSLSocket でラップする機能を持ちます。おおよそ TCPServer と同様のメソッドを持ちます。
基本的には SSL サーバを簡単に実装するためのクラスであり、これを利用せずとも SSL サーバを実装することは可能です。
以下はクライアントからの入力を標準出力に出力するだけのサーバです。
require 'socket' require 'openssl' include OpenSSL ctx = SSL::SSLContext.new() ctx.cert = X509::Certificate.new(File.read('cert.pem')) ctx.key = PKey::RSA.new(File.read('privkey.pem')) svr = TCPServer.new(2007) serv = SSL::SSLServer.new(svr, ctx) loop do while soc = serv.accept puts soc.read end end
new(svr, ctx) -> OpenSSL::SSL::SSLServer
[permalink][rdoc]TCPServer オブジェクトをラップする SSLServer オブジェクトを生成します。
svr にはラップするTCPServer オブジェクトを、 ctx には SSL サーバが用いる OpenSSL::SSL::SSLContext オブジェクトを生成します。
OpenSSL::SSL::SSLServer#listen や OpenSSL::SSL::SSLServer#accept は内部で svr で渡されたオブジェクトの TCPServer#listen や TCPServer#accept を呼び出します。
accept -> OpenSSL::SSL::SSLSocket
[permalink][rdoc]クライアントからの接続を受け付け、接続した SSLSocket オブジェクトを返します。
OpenSSL::SSL::SSLServer#start_immediately が真ならば、 SSLSocket#accept を呼び TLS/SSL ハンドシェイクを実行してから SSLSocket オブジェクトを返します。
close -> nil
[permalink][rdoc]内部のサーバソケットを閉じます。
listen(backlog=5) -> 0
[permalink][rdoc]ラップしている TCPServer の TCPServer#listen を呼びだします。
通常は TCPServer の初期化時に listen が呼びだされるため呼ぶ必要はないはずです。
shutdown(how=Socket::SHUT_RDWR) -> 0
[permalink][rdoc]ソケットの以降の接続を終了させます。
詳しくは BasicSocket#shutdown を参照してください。
start_immediately -> bool
[permalink][rdoc]OpenSSL::SSL::SSLServer#accept で accept したらすぐに TLS/SSL ハンドシェイクを実行するかどうかを返します。
[SEE_ALSO] OpenSSL::SSL::SSLServer#start_immediately=
start_immediately=(bool)
[permalink][rdoc]OpenSSL::SSL::SSLServer#accept で accept したらすぐに TLS/SSL ハンドシェイクを実行するかどうかを設定します。
これを真に設定した場合は、OpenSSL::SSL::SSLServer#accept で接続したソケットに対し OpenSSL::SSL::SSLSocket#accept を呼び、ハンドシェイクを実行します。
デフォルトでは true です。
[SEE_ALSO] OpenSSL::SSL::SSLServer#start_immediately
to_io -> TCPServer
[permalink][rdoc]ラップしている TCPServer オブジェクトを返します。