web-dev-qa-db-fra.com

Comment faire fonctionner SINATRA sur https / SSL?

Comme le dit le titre, Google ne donne rien d'utile à ce sujet.

Comment configurer et configurer HTTPS/SSL pour les applications SINATRA?

Comment créer une route HTTPS?

Je n'ai jamais utilisé HTTPS pour mes applications avant et n'avez aucune expérience de rack de peau/peu importe, alors j'apprécie les réponses détaillées.

35
apirogov

Je suppose que vous devez configurer votre serveur Web, pas Sinatra, pour travailler avec SSL. Dans Sinatra, vous pouvez utiliser request.secure? Méthode de vérification de l'utilisation SSL.

SSL + NGinx: le premier article , le second .

15
Daniel O'Hara

cela semble le faire pour moi:

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

[Bonne-tête à http://www.networkworld.com/columns/2007/090507-dr-internet.html ]

24
richard_bw

Je pense que l'utilisation rack-ssl est la meilleure option.

Ensuite, vous venez de faire:

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

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

et tout http:// Les appels sont redirigés vers https://

16
Tomek Wałkuski

J'ai modifié le code de RICHARD_BW pour pouvoir le fermer ou le redémarrer avec 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
10
Dmitriy Budnik

La solution la plus simple que je pouvais trouver après une large recherche est la solution postée par Frankici .

Placez simplement les éléments suivants en haut de votre application Sinatra Classic pour forcer votre demande à utiliser HTTPS:

require 'rack/ssl-enforcer'
use Rack::SslEnforcer
0
Skilly