From 61949eefde17da5497fe28cbbe311e459073296f Mon Sep 17 00:00:00 2001 From: gotoyuzo Date: Wed, 26 May 2004 18:14:27 +0000 Subject: * add test for OpenSSL::SSL. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6412 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/openssl/ssl_server.rb | 78 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 test/openssl/ssl_server.rb (limited to 'test/openssl/ssl_server.rb') diff --git a/test/openssl/ssl_server.rb b/test/openssl/ssl_server.rb new file mode 100644 index 0000000000..53e520379b --- /dev/null +++ b/test/openssl/ssl_server.rb @@ -0,0 +1,78 @@ +require "socket" +require "thread" +require "openssl" +require File.join(File.dirname(__FILE__), "utils.rb") + +def get_pem(io=$stdin) + buf = "" + while line = io.gets + if /^-----BEGIN / =~ line + buf << line + break + end + end + while line = io.gets + buf << line + if /^-----END / =~ line + break + end + end + return buf +end + +def make_key(pem) + begin + return OpenSSL::PKey::RSA.new(pem) + rescue + return OpenSSL::PKey::DSA.new(pem) + end +end + +ca_cert = OpenSSL::X509::Certificate.new(get_pem) +ssl_cert = OpenSSL::X509::Certificate.new(get_pem) +ssl_key = make_key(get_pem) +port = Integer(ARGV.shift) +verify_mode = Integer(ARGV.shift) +start_immediately = (/yes/ =~ ARGV.shift) + +store = OpenSSL::X509::Store.new +store.add_cert(ca_cert) +store.purpose = OpenSSL::X509::PURPOSE_SSL_CLIENT +ctx = OpenSSL::SSL::SSLContext.new +ctx.cert_store = store +#ctx.extra_chain_cert = [ ca_cert ] +ctx.cert = ssl_cert +ctx.key = ssl_key +ctx.verify_mode = verify_mode + +Socket.do_not_reverse_lookup = true +tcps = TCPServer.new("0.0.0.0", port) +ssls = OpenSSL::SSL::SSLServer.new(tcps, ctx) +ssls.start_immediately = start_immediately +ssock = nil + +Thread.start{ + while line = $stdin.gets + if /STARTTLS/ =~ line + ssock && ssock.accept + end + end + exit +} + +$stdout.sync = true +$stdout.puts Process.pid + +loop do + s = ssls.accept + ssock = s + Thread.start{ + q = Queue.new + th = Thread.start{ s.write(q.shift) while true } + while line = s.gets + q.push(line) + end + th.kill + s.close unless s.closed? + } +end -- cgit v1.2.3