2012-07-10 14 views
7

Sto cercando un modo semplice per abilitare SSL in un'applicazione Sinatra standalone in esecuzione tramite Thin senza dover passare i parametri --ssl, --ssl-key-file e --ssl-cert-file tramite la riga di comando Sottile.Posso abilitare SSL in Sinatra con Thin?

È possibile definirli direttamente all'interno dell'app Sinatra o tramite un file config.ru?

Ho passato diverse ore a cercare una risposta a questa domanda, ma finora non ho trovato nulla che funzioni.

+0

come scrivere la riga di comando in un file di script? – lidaobing

risposta

10

Ho appena trascorso alcune ore cercando di capirlo da solo.

Si scopre che Thin::Server.initialize scarti ssl opzioni durante il suo metodo initialization (delega alla sua istanza di Backend, che definisce immediatamente il suo ssl a nil, ignorando le opzioni SSL che hai passato in Thin::Server.new. Questo significa che si deve a . Imposta opzioni SSL dopo aver istanziato un server)

Ecco come fare:

class App < Sinatra::Base 

    # ... 

    def self.run! 
    rack_handler_config = {} 

    ssl_options = { 
     :private_key_file => '/path/to/foo.key', 
     :cert_chain_file => '/path/to/bar.crt', 
     :verify_peer => false, 
    } 

    Rack::Handler::Thin.run(self, rack_handler_config) do |server| 
     server.ssl = true 
     server.ssl_options = ssl_options 
    end 
    end 
end 

App.run! 
+0

un esempio davvero utile :-) grazie – rtacconi

9

T hese days (sinatra 1.4.1) run! accetta un blocco che produce server. Così si può fare questo:

MyApp.run! do |server| 
    ssl_options = { 
    :cert_chain_file => '/path/to/bar.crt', 
    :private_key_file => '/path/to/foo.key', 
    :verify_peer => false 
    } 
    server.ssl = true 
    server.ssl_options = ssl_options 
end 
+1

Very Cool! Dove sono documentate queste opzioni? - Non riesco a trovare altro che il tuo post! – user1513388

+1

http://rdoc.info/github/eventmachine/eventmachine/EventMachine/Connection:start_tls è apparentemente quello che sta succedendo qui. – Swizzlr

0

Io corro Sinatra e sottile (su Heroku) con SSL utilizzando il Rack::SslEnforcer, facendo questo:

if production? 
    require 'rack/ssl-enforcer' 
    use Rack::SslEnforcer 
end 

Questo dovrebbe essere prima di abilitare: sessioni in un file.

Problemi correlati