Как заставить Sinatra работать по HTTPS / SSL? - PullRequest
35 голосов
/ 13 сентября 2010

Как следует из названия, Google не дает ничего полезного в этом отношении.

Как настроить и настроить HTTPS / SSL для приложений Sinatra?

Как создать HTTPSroute?

Я никогда раньше не использовал HTTPS для своих приложений и не имею опыта настройки Rack / что угодно, поэтому я ценю подробные ответы.

Ответы [ 5 ]

24 голосов
/ 24 февраля 2011

это, кажется, делает это для меня:

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

[шляпа подсказка к http://www.networkworld.com/columnists/2007/090507-dr-internet.html]

16 голосов
/ 21 декабря 2012

Я думаю, использование rack-ssl - лучший вариант.

Тогда вы просто делаете:

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

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

и все http:// вызовы перенаправляются на https://

15 голосов
/ 13 сентября 2010

Полагаю, вам нужно настроить свой веб-сервер, а не Sinatra, для работы с SSL.В Sinatra вы можете использовать метод request.secure? для проверки использования SSL.

SSL + Nginx: первая статья , вторая статья .

10 голосов
/ 11 сентября 2012

Я изменил код richard_bw , чтобы иметь возможность закрыть или перезапустить его с помощью 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 голосов
/ 25 февраля 2019

Самое простое решение, которое я смог найти после широкого поиска, - это решение, опубликованное Frank здесь .

Просто поместите в верхнюю часть классического приложения Sinatra следующее, чтобы приложение использовало HTTPS:

require 'rack/ssl-enforcer'
use Rack::SslEnforcer
...