2010-09-12 26 views
34

Como dice el título, Google no da nada útil sobre esto.¿Cómo hacer que Sinatra funcione a través de HTTPS/SSL?

¿Cómo configuro y configuro HTTPS/SSL para las aplicaciones de Sinatra?

¿Cómo creo una ruta HTTPS?

Nunca antes he usado HTTPS para mis aplicaciones y no tengo experiencia en ajustar Rack/lo que sea, por lo que agradezco las respuestas detalladas.

Respuesta

15

Supongo que debe configurar su servidor web, no Sinatra, para que funcione con SSL. En Sinatra puede usar el método request.secure? para verificar el uso de SSL.

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

22

esto parece que lo haga por mí:

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 

[sombrero de punta a http://www.networkworld.com/columnists/2007/090507-dr-internet.html]

+0

quieren dar algunos consejos sobre [una pregunta similar] (http://stackoverflow.com/questions/14462558/error-bad-uri-when-trying-to-get-webrick-to-accept-https)? – rampion

+0

Funciona como se pretendía, pero ¿cómo se establece la dirección de vinculación? : BindAddress no parece pegarse. – Tim

+1

Parece una respuesta más adecuada a la pregunta – CodeMonkey

10

he modificado el código de richard_bw para poder cerrar o reiniciar 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

¿Cómo puedo generar un certificado para Webrick? –

+2

Depende de las razones por las que lo necesita. Si solo está probando, puede emitir uno autofirmado. Esta es la forma de hacerlo en ubuntu: http://askubuntu.com/questions/49196/how-do-i-create-a-self-signed-ssl-certificate –

+0

Si lo necesita para la producción, verificaría su registrador de dominio para tal servicio. Usualmente tienes que pagar por ello. –

16

Creo que el uso de rack-ssl es la mejor opción.

Entonces usted acaba de hacer:

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

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

y todas http:// llamadas se redirigen al https://

+0

Esto solo funciona si tienes un certificado SSL instalado –

+1

Bueno, siempre deberías, no estoy hablando de la opción "VERIFY_NONE" aquí :) –

Cuestiones relacionadas