要約
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
目次
- 特異メソッド
- インスタンスメソッド
継承しているメソッド
- OpenSSL::SSL::SocketForwarderから継承しているメソッド
特異メソッド
new(svr, ctx) -> OpenSSL::SSL::SSLServer
[permalink][rdoc][edit]-
TCPServer オブジェクトをラップする SSLServer オブジェクトを生成します。
svr にはラップするTCPServer オブジェクトを、 ctx には SSL サーバが用いる OpenSSL::SSL::SSLContext オブジェクトを生成します。
OpenSSL::SSL::SSLServer#listen や OpenSSL::SSL::SSLServer#accept は内部で svr で渡されたオブジェクトの TCPServer#listen や TCPServer#accept を呼び出します。
- [PARAM] svr:
- 利用する TCPServer オブジェクト
- [PARAM] ctx:
- SSL サーバとして用いる OpenSSL::SSL::SSLContext オブジェクト
インスタンスメソッド
accept -> OpenSSL::SSL::SSLSocket
[permalink][rdoc][edit]-
クライアントからの接続を受け付け、接続した SSLSocket オブジェクトを返します。
OpenSSL::SSL::SSLServer#start_immediately が真ならば、 SSLSocket#accept を呼び TLS/SSL ハンドシェイクを実行してから SSLSocket オブジェクトを返します。
close -> nil
[permalink][rdoc][edit]-
内部のサーバソケットを閉じます。
listen(backlog=5) -> 0
[permalink][rdoc][edit]-
ラップしている TCPServer の TCPServer#listen を呼びだします。
通常は TCPServer の初期化時に listen が呼びだされるため呼ぶ必要はないはずです。
- [PARAM] backlog:
- クライアントからの接続要求を保留できる数
- [EXCEPTION] Errno::EXXX:
- listen(2) が失敗すれば 例外 Errno::EXXX が発生します。
shutdown(how=Socket::SHUT_RDWR) -> 0
[permalink][rdoc][edit]-
ソケットの以降の接続を終了させます。
詳しくは BasicSocket#shutdown を参照してください。
- [PARAM] how:
- 接続の終了の仕方を Socket::SHUT_RD, Socket::SHUT_WR, Socket::SHUT_RDWR などで指定します。
start_immediately -> bool
[permalink][rdoc][edit]-
OpenSSL::SSL::SSLServer#accept で accept したらすぐに TLS/SSL ハンドシェイクを実行するかどうかを返します。
[SEE_ALSO] OpenSSL::SSL::SSLServer#start_immediately=
start_immediately=(bool)
[permalink][rdoc][edit]-
OpenSSL::SSL::SSLServer#accept で accept したらすぐに TLS/SSL ハンドシェイクを実行するかどうかを設定します。
これを真に設定した場合は、OpenSSL::SSL::SSLServer#accept で接続したソケットに対し OpenSSL::SSL::SSLSocket#accept を呼び、ハンドシェイクを実行します。
デフォルトでは true です。
- [PARAM] bool:
- 設定する真偽値。
[SEE_ALSO] OpenSSL::SSL::SSLServer#start_immediately
to_io -> TCPServer
[permalink][rdoc][edit]-
ラップしている TCPServer オブジェクトを返します。