Ответ 1
Я думаю, вам нужно настроить свой веб-сервер, а не Sinatra, на работу с SSL. В Sinatra вы можете использовать метод request.secure?
для проверки использования SSL.
SSL + Nginx: первая статья, вторая.
Как гласит название, Google не дает ничего полезного в этом отношении.
Как настроить и настроить HTTPS/SSL для приложений Sinatra?
Как создать маршрут HTTPS?
Я никогда раньше не использовал HTTPS для своих приложений, и у меня нет опыта в настройке Rack/whatever, поэтому я ценю подробные ответы.
Я думаю, вам нужно настроить свой веб-сервер, а не Sinatra, на работу с SSL. В Sinatra вы можете использовать метод request.secure?
для проверки использования SSL.
SSL + Nginx: первая статья, вторая.
это, кажется, делает это для меня:
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
[tip tip to http://www.networkworld.com/columnists/2007/090507-dr-internet.html]
Я думаю, что использование rack-ssl - лучший вариант.
Затем вы просто выполните:
class Application < Sinatra::Base
use Rack::SSL
get '/' do
'SSL FTW!'
end
end
и все вызовы http://
перенаправляются на https://
Я изменил код 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