如何让Sinatra通过HTTPS/SSL工作?

api*_*gov 35 ruby ssl https sinatra

正如标题所说,谷歌没有提供任何有用的信息.

如何为Sinatra应用程序设置和配置HTTPS/SSL?

如何创建HTTPS路由?

我以前从来没有为我的应用程序使用HTTPS,也没有调整Rack /的经验,所以我很感激详细的答案.

小智 24

这似乎是为我做的:

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
Run Code Online (Sandbox Code Playgroud)

[提示http://www.gworkworld.com/columnists/2007/090507-dr-internet.html ]

  • 这似乎是这个问题的更合适的答案 (2认同)

Tom*_*ski 16

我认为使用rack-ssl是最好的选择.

那你就做:

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

  get '/' do
    'SSL FTW!'
  end
end
Run Code Online (Sandbox Code Playgroud)

并且所有http://呼叫都被重定向到https://


Dan*_*ara 15

我想你需要设置你的Web服务器,而不是Sinatra,以使用SSL.在Sinatra中,您可以使用该request.secure?方法检查SSL使用情况.

SSL + Nginx:第一篇文章,第二篇文章.


Dmi*_*nik 10

我修改了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
Run Code Online (Sandbox Code Playgroud)

  • 根据你需要它的原因.如果它只是测试你可以发出自签名的.这是在ubuntu上做的方法:http://askubuntu.com/questions/49196/how-do-i-create-a-self-signed-ssl-certificate (2认同)
  • 我使用`:Host` Rack选项能够监听公共接口,否则它总是只有localhost:`:Host =>"0.0.0.0"`.(CFR).[类:Rack :: Server](http://www.rubydoc.info/gems/rack/Rack/Server#initialize-instance_method).`:BindAddress` Webrick选项没有按预期工作. (2认同)