10 Stimmen

Wie aktiviert man SSL für eine eigenständige Sinatra-Anwendung?

Ich möchte eine schnelle Server-App in Sinatra schreiben. Es muss in sich geschlossen sein (d.h. nicht apache/nginx/passenger verwenden), aber auch SSL unterstützen muss.

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

8voto

Jacob Punkte 21787

Um dies mit MRI Ruby zu tun, verwenden Sie das 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

Dann in Ihrer eigenständigen Anwendung:

app.rb

require 'sinatra'
require 'sinatra_ssl'

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

get "/" do
  "Hallo Welt!"

1 Stimmen

Bitte stellen Sie sicher, dass Sie require "webrick/https" auch zur Liste der erforderlichen Gems für sinatra_ssl.rb hinzufügen. Funktioniert ansonsten einwandfrei!

2voto

clyfe Punkte 23285

Verwenden Sie den JRuby-Interpreter + das jetty-rackup-Gem (http://github.com/geekq/jetty-rackup) Bearbeiten Sie die jetty-rackup-Datei im jetty-rackup-Gem und fügen Sie einen SslSocketConnector hinzu, hier ist etwas Code, der Ihnen hilft:

    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)

Beispielkonfiguration:

# Konfiguration
:acceptor_size: 10
:ssl: true
:keystore: keystore.jks
:password: your_pass
# :key_password: your_pass # wenn unterschiedlich
# :truststore: truststore.jks # wenn unterschiedlich
# :trust_pasword: your_pass # wenn unterschiedlich

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X