我想在Sinatra寫一個快速的服務器應用程序。它必須是獨立的(即不使用apache/nginx/passenger),但也必須支持SSL。如何爲獨立的Sinatra應用程序啓用SSL?
有沒有簡單的方法來啓用對Sinatra的SSL支持(例如使用WEBRick)?
我想在Sinatra寫一個快速的服務器應用程序。它必須是獨立的(即不使用apache/nginx/passenger),但也必須支持SSL。如何爲獨立的Sinatra應用程序啓用SSL?
有沒有簡單的方法來啓用對Sinatra的SSL支持(例如使用WEBRick)?
要與MRI紅寶石做到這一點,請使用以下猴補丁:
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
然後,在獨立應用程序:
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
使用JRuby解釋+碼頭-rackup寶石(http://github.com/geekq/jetty-rackup) 編輯碼頭,rackup在碼頭,rackup寶石文件,並添加SslSocketConnector,一些代碼,以幫助您:
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)
樣本配置:
# 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
生成keystore.jks:http://docs.codehaus.org/display/JETTY/How+to+configure+SSL
請務必添加'需要「的WEBrick/HTTPS 「以及sinatra_ssl.rb所需的gem列表。否則工作正常! – sybohy 2013-07-24 22:00:38
好抓,固定。 – Jacob 2014-06-05 20:27:43