Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'socket'
- require 'openssl'
- def wrap(server)
- key = OpenSSL::PKey::RSA.generate(2048)
- cert = OpenSSL::X509::Certificate.new
- cert.issuer = cert.subject = OpenSSL::X509::Name.new([['CN', 'localhost']])
- cert.public_key = key.public_key
- cert.not_before = Time.now
- cert.not_after = cert.not_before + 60 * 60
- cert.serial = cert.not_before.to_i
- cert.sign(key, "sha256")
- context = OpenSSL::SSL::SSLContext.new('TLSv1_server')
- context.set_params({
- :verify_mode => OpenSSL::SSL::VERIFY_NONE,
- :key => key,
- :cert => cert,
- })
- OpenSSL::SSL::SSLServer.new(gs, context)
- end
- TCPServer.open(ARGV[0].to_i) do |gs|
- puts %_server is on #{gs.addr.join(',')}_
- gs = wrap(gs)
- loop do
- begin
- while s = gs.accept
- addr = s.addr.join(',')
- puts %_#{addr} connected #{"with #{s.cipher.join(',')}" if defined?(s.cipher)}_
- s.each_line {|line| puts "#{addr}: #{line}" }
- puts %_#{addr} disconnected_
- end
- rescue SystemCallError, OpenSSL::SSL::SSLError => e
- puts "#{e.class}: #{e}"
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement