【问题标题】:How to make Sinatra work over HTTPS/SSL?如何让 Sinatra 通过 HTTPS/SSL 工作?
【发布时间】:2011-04-11 10:14:14
【问题描述】:

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

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

如何创建 HTTPS 路由?

我以前从未在我的应用程序中使用过 HTTPS,也没有调整 Rack/whatever 的经验,所以我很感激详细的回答。

【问题讨论】:

    标签: ruby ssl https sinatra


    【解决方案1】:

    为了避免使用多个服务器,这里的 webrick 特定答案很好,但 webrick 特定。

    使用Puma时,可以简化配置:

    require 'sinatra/base'
    
    class MyServer  < Sinatra::Base
        post '/' do
          "Hello, world!\n"
        end
    end
    
    Rack::Server.start app: MyServer, Host: "ssl://0.0.0.0:8443?key=privkey.pem&cert=cert.pem"
    

    【讨论】:

      【解决方案2】:

      经过广泛搜索,我能找到的最简单的解决方案是 Frank here 发布的解决方案。

      只需将以下内容放在 Sinatra 经典应用程序的顶部,即可强制您的应用程序使用 HTTPS:

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

      【讨论】:

        【解决方案3】:

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

        然后你就这样做:

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

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

        【讨论】:

        • 这只有在您安装了 SSL 证书时才有效
        • 嗯,你总是应该,我不是在谈论“VERIFY_NONE”选项:)
        【解决方案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
        

        【讨论】:

        • 如何为 Webrick 生成证书?
        • 取决于您需要它的原因。如果只是测试,您可以签发自签名的。这是在 ubuntu 上执行此操作的方法:askubuntu.com/questions/49196/…
        • 如果您在生产中需要它,我会向您的域名注册商咨询此类服务。通常,您必须为此付费。
        • 我应该使用哪一个:/etc/ssl/certs/ssl-cert-snakeoil.pem 或 /etc/ssl/private/ssl-cert-snakeoil.key?
        • 我使用了:Host Rack 选项来收听公共接口,否则它总是只有本地主机::Host =&gt; "0.0.0.0"。参照。 Class: Rack::Server:BindAddress Webrick 选项未按预期工作。
        【解决方案5】:

        这似乎对我有用:

        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的小费]

        【讨论】:

        • 想给a similar question一些提示吗?
        • 按预期工作,但如何设置绑定地址? :BindAddress 似乎没有粘住。
        • 这似乎是对这个问题的更合适的答案
        【解决方案6】:

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

        SSL + Nginx:the first articlethe second one

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-29
          • 2010-12-17
          • 1970-01-01
          • 2018-10-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多