Advertisement
Guest User

Untitled

a guest
May 5th, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.05 KB | None | 0 0
  1. require 'socket'
  2. require 'openssl'
  3.  
  4. def wrap(server)
  5. key = OpenSSL::PKey::RSA.generate(2048)
  6. cert = OpenSSL::X509::Certificate.new
  7. cert.issuer = cert.subject = OpenSSL::X509::Name.new([['CN', 'localhost']])
  8. cert.public_key = key.public_key
  9. cert.not_before = Time.now
  10. cert.not_after = cert.not_before + 60 * 60
  11. cert.serial = cert.not_before.to_i
  12. cert.sign(key, "sha256")
  13.  
  14. context = OpenSSL::SSL::SSLContext.new('TLSv1_server')
  15. context.set_params({
  16. :verify_mode => OpenSSL::SSL::VERIFY_NONE,
  17. :key => key,
  18. :cert => cert,
  19. })
  20.  
  21. OpenSSL::SSL::SSLServer.new(gs, context)
  22. end
  23.  
  24. TCPServer.open(ARGV[0].to_i) do |gs|
  25. puts %_server is on #{gs.addr.join(',')}_
  26.  
  27. gs = wrap(gs)
  28.  
  29. loop do
  30. begin
  31. while s = gs.accept
  32. addr = s.addr.join(',')
  33. puts %_#{addr} connected #{"with #{s.cipher.join(',')}" if defined?(s.cipher)}_
  34. s.each_line {|line| puts "#{addr}: #{line}" }
  35. puts %_#{addr} disconnected_
  36. end
  37. rescue SystemCallError, OpenSSL::SSL::SSLError => e
  38. puts "#{e.class}: #{e}"
  39. end
  40. end
  41. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement