Подтвердить что ты не робот

Как заставить Sinatra работать через HTTPS/SSL?

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

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

Как создать маршрут HTTPS?

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

[tip tip to http://www.networkworld.com/columnists/2007/090507-dr-internet.html]

Ответ 3

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

Затем вы просто выполните:

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

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

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

Ответ 4

Я изменил код 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