2010-03-02 5 views
11

Ich möchte eine schnelle Server-App in Sinatra schreiben. Es muss in sich geschlossen sein (d. H. Apache/nginx/Passagier nicht verwenden), muss aber auch SSL unterstützen.Wie aktiviert man SSL für eine eigenständige Sinatra App?

Gibt es eine einfache Möglichkeit, die SSL-Unterstützung für Sinatra zu aktivieren (z. B. mit WEBRick)?

Antwort

9

Dazu mit MRI Rubin, verwenden Sie die folgende monkeypatch:

sinatra_ssl.rb:

require 'webrick/https' 

module Sinatra 
    class Application 
    def self.run! 
     certificate_content = File.open(ssl_certificate).read 
     key_content = File.open(ssl_key).read 

     server_options = { 
     :Host => bind, 
     :Port => port, 
     :SSLEnable => true, 
     :SSLCertificate => OpenSSL::X509::Certificate.new(certificate_content), 
     :SSLPrivateKey => OpenSSL::PKey::RSA.new(key_content) 
     } 

     Rack::Handler::WEBrick.run self, server_options do |server| 
     [:INT, :TERM].each { |sig| trap(sig) { server.stop } } 
     server.threaded = settings.threaded if server.respond_to? :threaded= 
     set :running, true 
     end 
    end 
    end 
end 

im Standalone-Anwendung dann:

app.rb

require 'sinatra' 
require 'sinatra_ssl' 

set :port, 8443 
set :ssl_certificate, "server.crt" 
set :ssl_key, "server.key" 

get "/" do 
    "Hello world!" 
end 
+1

Bitte stellen Sie sicher, „webrick/https hinzuzufügen' erfordern "' 'auch auf die Liste der erforderlichen Juwelen für sinatra_ssl.rb. Funktioniert ansonsten gut! – sybohy

+0

Guter Fang, behoben. – Jacob

2

Verwenden JRuby Interpreter + Anlegesteg-rackup gem (http://github.com/geekq/jetty-rackup) bearbeiten Anlegesteg-rackup Datei in der Mole-rackup Juwel und fügen Sie einen SslSocketConnector, einige Code, Ihnen zu helfen:

security_connector = Jetty::Security::SslSocketConnector.new 
    security_connector.set_acceptors(config[:acceptor_size]) 
    security_connector.port = config[:port] 
    security_connector.confidential_port = config[:port] 
    security_connector.keystore = keystore 
    security_connector.password = config[:password] 
    security_connector.key_password = config[:key_password].nil? ? config[:password] : config[:key_password] 
    security_connector.truststore = truststore 
    security_connector.trust_password = config[:trust_pasword].nil? ? config[:password] : config[:trust_pasword] 
    server.add_connector(security_connector) 

Beispielconfig:

# Config 
:acceptor_size: 10 
:ssl: true 
:keystore: keystore.jks 
:password: your_pass 
# :key_password: your_pass # if different 
# :truststore: truststore.jks # if different 
# :trust_pasword: your_pass # if different 

generieren keystore.jks: http://docs.codehaus.org/display/JETTY/How+to+configure+SSL

Verwandte Themen