web-dev-qa-db-ja.com

SinatraをHTTPS / SSLで機能させるには?

タイトルが言うように、グーグルはこれに関して有用なものを何も与えません。

Sinatraアプリ用にHTTPS/SSLをセットアップして構成するにはどうすればよいですか?

HTTPSルートを作成するにはどうすればよいですか?

私はこれまでにアプリでHTTPSを使用したことがなく、Rack /その他を調整した経験がないので、詳細な回答に感謝します。

35
apirogov

SSLを使用するには、SinatraではなくWebサーバーをセットアップする必要があると思います。シナトラではrequest.secure?メソッドを使用して、SSLの使用状況を確認します。

SSL + Nginx: 最初の記事2番目の記事

15
Daniel O'Hara

これは私のためにそれをするようです:

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 のヒント]

24
richard_bw

rack-ssl を使用するのが最善の方法だと思います。

その後、あなたはただ行います:

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

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

すべてのhttp://呼び出しはhttps://にリダイレクトされます

16
Tomek Wałkuski

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
10
Dmitriy Budnik

広範な検索の後に私が見つけることができる最も簡単な解決策は、 Frankhere によって投稿された解決策です。

以下をSinatraクラシックアプリの上部に配置するだけで、アプリケーションで強制的にHTTPSを使用できます。

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