How to make Sinatra work over HTTPS/SSL?

后端 未结 5 1612
闹比i
闹比i 2020-11-30 21:40

As the title says, Google doesn\'t give anything useful concerning this.

How do I set up and configure HTTPS/SSL for Sinatra apps?

How do I create a HTTPS ro

相关标签:
5条回答
  • 2020-11-30 21:53

    The easiest solution I could find after a broad search, is the solution posted by Frank here.

    Simply place the following at the top of your Sinatra classic app to force your application to use HTTPS:

    require 'rack/ssl-enforcer'
    use Rack::SslEnforcer
    
    0 讨论(0)
  • 2020-11-30 21:54

    I guess you need to setup your Web-server, not Sinatra, to work with SSL. In Sinatra you can use the request.secure? method to check for the SSL usage.

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

    0 讨论(0)
  • 2020-11-30 21:57

    I modified code of richard_bw as to be able close or restart it with 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 讨论(0)
  • 2020-11-30 21:58

    this seems to do it for 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
    

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

    0 讨论(0)
  • 2020-11-30 22:02

    I think using rack-ssl is the best option.

    Then you just do:

    class Application < Sinatra::Base
      use Rack::SSL
    
      get '/' do
        'SSL FTW!'
      end
    end
    

    and all http:// calls are redirected to https://

    0 讨论(0)
提交回复
热议问题