2010-09-12 21 views
34

Come dice il titolo, Google non fornisce nulla di utile a riguardo.Come far funzionare Sinatra su HTTPS/SSL?

Come configurare e configurare HTTPS/SSL per le app Sinatra?

Come si crea un percorso HTTPS?

Non ho mai usato HTTPS per le mie app in precedenza e non ho esperienza con l'installazione di Rack/qualsiasi cosa, quindi apprezzo le risposte dettagliate.

risposta

15

Suppongo che sia necessario configurare il server Web, non Sinatra, per lavorare con SSL. In Sinatra è possibile utilizzare il metodo request.secure? per verificare l'utilizzo di SSL.

SSL + Nginx: the first article, the second one.

22

questo sembra farlo per me:

require 'sinatra/base' 
require 'webrick' 
require 'webrick/https' 
require 'openssl' 

CERT_PATH = '/opt/myCA/server/' 

webrick_options = { 
     :Port    => 8443, 
     :Logger    => WEBrick::Log::new($stderr, WEBrick::Log::DEBUG), 
     :DocumentRoot  => "/ruby/htdocs", 
     :SSLEnable   => true, 
     :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE, 
     :SSLCertificate  => OpenSSL::X509::Certificate.new( File.open(File.join(CERT_PATH, "my-server.crt")).read), 
     :SSLPrivateKey  => OpenSSL::PKey::RSA.new(   File.open(File.join(CERT_PATH, "my-server.key")).read), 
     :SSLCertName  => [ [ "CN",WEBrick::Utils::getservername ] ] 
} 

class MyServer < Sinatra::Base 
    post '/' do 
     "Hellow, world!" 
    end    
end 

Rack::Handler::WEBrick.run MyServer, webrick_options 

[Punta di cappello a http://www.networkworld.com/columnists/2007/090507-dr-internet.html]

+0

vuole dare alcuni suggerimenti su [una domanda simile] (http://stackoverflow.com/questions/14462558/error-bad-uri-quando-cerca-to-get-webrick-to-accept-https)? – rampion

+0

Funziona come previsto, ma come si imposta l'indirizzo di bind? : BindAddress non sembra attaccare. – Tim

+1

Questa sembra una risposta più appropriata alla domanda – CodeMonkey

10

ho modificato il codice di richard_bw da poter chiudere o riavviare con Ctrl + C:

require 'sinatra/base' 
require 'webrick' 
require 'webrick/https' 
require 'openssl' 

class MyServer < Sinatra::Base 
    post '/' do 
     "Hello, world!\n" 
    end    
end 

CERT_PATH = '/opt/myCA/server/' 

webrick_options = { 
    :Port    => 8443, 
    :Logger    => WEBrick::Log::new($stderr, WEBrick::Log::DEBUG), 
    :DocumentRoot  => "/ruby/htdocs", 
    :SSLEnable   => true, 
    :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE, 
    :SSLCertificate  => OpenSSL::X509::Certificate.new( File.open(File.join(CERT_PATH, "server.crt")).read), 
    :SSLPrivateKey  => OpenSSL::PKey::RSA.new(   File.open(File.join(CERT_PATH, "server.key")).read), 
    :SSLCertName  => [ [ "CN",WEBrick::Utils::getservername ] ], 
    :app    => MyServer 
} 
Rack::Server.start webrick_options 
+0

Come si genera un certificato per Webrick? –

+2

Depensi sui motivi per cui ne hai bisogno. Se si tratta solo di test, è possibile emettere un messaggio autofirmato. Questo è il modo di farlo su ubuntu: http://askubuntu.com/questions/49196/how-do-i-create-a-self-signed-ssl-certificate –

+0

Se ne hai bisogno per la produzione, controllerò il tuo registrar di domini per tale servizio. Di solito devi pagare per questo. –

16

Penso che usare rack-ssl sia l'opzione migliore.

Poi basta fare:

class Application < Sinatra::Base 
    use Rack::SSL 

    get '/' do 
    'SSL FTW!' 
    end 
end 

e tutti http:// chiamate vengono reindirizzate al https://

+0

Funziona solo se è installato un certificato SSL –

+1

Bene, dovresti sempre, non sto parlando dell'opzione "VERIFY_NONE" qui :) –

Problemi correlati