До Rails 3 вы могли изменить файл сценария/сервера, чтобы добавить параметры SSL и указать команде сервера использовать HTTPS-версию WEBrick. Теперь, когда все эти сценарии исчезли, кто-нибудь знает, как заставить это работать с Rails 3 или 4?
Как настроить WEBrick для использования SSL в Rails?
Ответы (2)
Хотя каталог scripts
в Rails 4 исчез, каталог bin
остался. Вы можете заставить WEBrick работать с SSL-сертификатом, отредактировав скрипт bin/rails
. Протестировано на Rails 4 и Ruby 2.1.1, установленных с помощью rbenv.
Большая часть этого взята из этот пост в блоге и этот вопрос о переполнении стека.
#!/usr/bin/env ruby
require 'rails/commands/server'
require 'rack'
require 'webrick'
require 'webrick/https'
if ENV['SSL'] == "true"
module Rails
class Server < ::Rack::Server
def default_options
super.merge({
:Port => 3001,
:environment => (ENV['RAILS_ENV'] || "development").dup,
:daemonize => false,
:debugger => false,
:pid => File.expand_path("tmp/pids/server.pid"),
:config => File.expand_path("config.ru"),
:SSLEnable => true,
:SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
:SSLPrivateKey => OpenSSL::PKey::RSA.new(
File.open("certs/server.key").read),
:SSLCertificate => OpenSSL::X509::Certificate.new(
File.open("certs/server.crt").read),
:SSLCertName => [["CN", WEBrick::Utils::getservername]],
})
end
end
end
end
APP_PATH = File.expand_path('../../config/application', __FILE__)
require_relative '../config/boot'
require 'rails/commands'
Запуск сервера rails из каталога приложения работает для запуска сервера с поддержкой SSL сейчас, когда для переменной среды SSL установлено значение true, а настройки rails по умолчанию сохраняются, когда переменная среды опущена.
$ SSL=true rails s
=> Booting WEBrick
=> Rails 4.1.0 application starting in development on https://0.0.0.0:3001
=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
=> Ctrl-C to shutdown server
[2014-04-24 22:59:10] INFO WEBrick 1.3.1
[2014-04-24 22:59:10] INFO ruby 2.1.1 (2014-02-24) [x86_64-darwin13.0]
[2014-04-24 22:59:10] INFO
Certificate:
Data:
...
Если вы не хотите использовать предварительно сгенерированный сертификат, вы можете использовать Utils::create_self_signed_cert
WEBrick, как указано в этом ответе:
Альтернатива SSL/HTTPS на WEBrick: SSL/HTTPS на тонком
В качестве альтернативы попытке настроить WEBrick для использования HTTPS/SSL для вашего приложения Rails вы можете попробовать переключиться на использование Тонкий сервер вместо этого, потому что он поставляется с удобными опциями для настройки HTTPS/SSL из коробки.
Установка тонкого
Во-первых, добавьте Thin как гем в свой Gemfile:
gem 'thin'
Затем запустите bundle install
из командной строки.
Использование тонкого HTTPS/SSL для сред разработки
Если вы просто хотите протестировать приложение Rails с использованием HTTPS/SSL в локальной среде разработки, просто запустите
thin start --ssl
Я должен подчеркнуть, что это не подходит для производственных сред, потому что вам необходимо использовать действительный сертификат SSL от центра сертификации, чтобы можно было проверить соединения SSL/HTTPS. и безопасно.
Дополнительные опции
Есть и другие варианты, которые вы можете передать в Thin. Вы можете получить их полный список, запустив thin --help
. Например, мне нравится указывать свой собственный ip-адрес и порт, а также демонизировать Thin в фоновый процесс:
thin start --ssl \
--address <ip-address> \
--port <port> \
--daemonize
Использование тонкого HTTPS/SSL с сертификатом SSL
Если вы хотите указать Thin использовать SSL-сертификат (например, тот, который вы получили от действительного центра сертификации), вы можете использовать следующие параметры:
thin start --ssl \
--ssl-cert-file <path-to-public-certificate> \
--ssl-key-file <path-to-private-key>
ERROR OpenSSL::SSL::SSLError: SSL_accept returned=1 errno=0 state=SSLv2/v3 read client hello A: http request
- person Chloe   schedule 08.06.2013