-
-
Save TakahikoKawasaki/aefb0b9e4306b6dfbcc5 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby | |
# | |
# This code snippet shows how to enable SSL in Sinatra+Thin. | |
# | |
require 'sinatra' | |
require 'thin' | |
class MyThinBackend < ::Thin::Backends::TcpServer | |
def initialize(host, port, options) | |
super(host, port) | |
@ssl = true | |
@ssl_options = options | |
end | |
end | |
configure do | |
set :environment, :production | |
set :bind, '0.0.0.0' | |
set :port, 443 | |
set :server, "thin" | |
class << settings | |
def server_settings | |
{ | |
:backend => MyThinBackend, | |
:private_key_file => File.dirname(__FILE__) + "/server.key", | |
:cert_chain_file => File.dirname(__FILE__) + "/server.crt", | |
:verify_peer => false | |
} | |
end | |
end | |
end | |
get '/' do | |
"Hello, SSL." | |
end |
Oh, very sorry. I noticed your comment just now (26 Oct 2015). Use this code as you like for both non-commercial and commercial purposes.
More generic way is here:
https://gist.github.com/TakahikoKawasaki/40ef0ab011b0a467bedf#file-sinatra-ssl-rb
Works great! However, how can I have it send the Access-Control-Allow-Origin header? I'm new to all this ruby stuff, going to go back to googling in the meantime...
edit: got it to work something like this:
get '/blah' do
@BLAH = # code ...
code...
headers['Access-Control-Allow-Origin'] = '*'
return @blah.to_json
end
Aside from generating the key, csr, and certificate, is there anything else that needs to be configured (perhaps on the OS level) to get this to work? I can get the sinatra script to execute just fine..it says it's listening on 0.0.0.0:443 but Chrome is saying the site cannot be reached...
Anyone knows how to do the same thing with puma?
Thanks for this!
How should I configure this if I've got more than one subclasses of Sinatra::Base
and using config.ru
?
Hi,
this was very helpful. I looked through a variety of posts on the topic and none worked properly. Would you mind if I use this code in a demo on certificate pinning that I'm building? Ideally you would add a MIT license or something.
Thanks,
Daniel