Skip to content

Instantly share code, notes, and snippets.

@bachue
Last active August 29, 2015 14:02
Show Gist options
  • Save bachue/3eb1d6e1fe1685e2947f to your computer and use it in GitHub Desktop.
Save bachue/3eb1d6e1fe1685e2947f to your computer and use it in GitHub Desktop.
To create a basic HTTPSServer by Ruby
#!/usr/bin/ruby
require "socket"
require "openssl"
require "thread"
listeningPort = Integer(ARGV[0])
server = TCPServer.new(listeningPort)
sslContext = OpenSSL::SSL::SSLContext.new
sslContext.key = OpenSSL::PKey::RSA.new 2048
sslContext.cert = OpenSSL::X509::Certificate.new
sslContext.cert.not_before = Time.now
sslContext.cert.not_after = Time.now + 365*24*60*60
sslContext.cert.public_key = sslContext.key.public_key
sslContext.cert.sign sslContext.key, OpenSSL::Digest::SHA1.new
sslServer = OpenSSL::SSL::SSLServer.new(server, sslContext)
puts "Listening on port #{listeningPort}"
loop do
connection = sslServer.accept
Thread.new {
begin
while (lineIn = connection.gets)
break if lineIn =~ /^\s*$/
lineIn = lineIn.chomp
$stdout.puts "=> " + lineIn
end
connection.puts <<-RESPONSE
HTTP/1.1 200 OK
Content-Type: text/html
Connection: Close
RESPONSE
connection.close
rescue
$stderr.puts $!
end
}
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment