Как я могу передать опции SSL на "сервер рельсов" в Rails 3.0? - PullRequest
6 голосов
/ 31 августа 2010

Есть ли способ передать опции SSL на "сервер rails" (на Rails 3.0.0), используя пользовательскую конфигурацию Rack или что-то подобное?Я пытаюсь сделать две вещи:

  1. позволяет Cucumber запускать тесты, включающие как безопасные, так и незащищенные URL-адреса, и
  2. упрощает работу для новых разработчиков, поэтому они нене нужно настраивать Apache и настраивать все элементы SSL / cert, прежде чем они смогут даже написать строку кода.

На 2.3.8 у нас был разветвленный скрипт / сервер, который запускал быспециальный WEBrick на второй порт со всеми соответствующими параметрами SSL.Конечно, это взорвалось, когда я попытался обновить до Rails 3, поэтому я пытаюсь выяснить, как это исправить, и в идеале сделать это так, чтобы ничего не было разветвлено.

В нашем раздвоенномсценарий / сервер, мы устанавливали параметры, подобные следующим:

:SSLEnable        => true,
:SSLVerifyClient    => OpenSSL::SSL::VERIFY_NONE,
:SSLPrivateKey        => OpenSSL::PKey::RSA.new(File.open(current_dir + "/config/certs/server.key").read),
:SSLCertificate         => OpenSSL::X509::Certificate.new(File.open(current_dir + "/config/certs/server.crt").read),
:SSLCertName    => [ [ "CN", WEBrick::Utils::getservername ] ]

, но я не знаю, как это сделать в новой среде.

Спасибо за любую помощь!

Ответы [ 2 ]

5 голосов
/ 23 октября 2011

Взгляните на Тонкий сервер вместо WEBrick.Использование Thin имеет так много преимуществ, что я не могу перечислить их все здесь, но это должно решить вашу проблему, так как он поддерживает SSL.

При запуске thin передайте следующие параметры:

SSL options:
    --ssl                        Enables SSL
    --ssl-key-file PATH          Path to private key
    --ssl-cert-file PATH         Path to certificate
    --ssl-verify                 Enables SSL certificate verification

В производственной среде вы в идеале захотите обрабатывать SSL на уровне Nginx или Apache, но это должно соответствовать вашим требованиям к разработке.

1 голос
/ 26 июля 2012

Вот решение, которое я придумал. Я изменил script/rails, чтобы он выглядел так:

#!/usr/bin/env ruby
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.

APP_PATH = File.expand_path('../../config/application',  __FILE__)
require File.expand_path('../../config/boot',  __FILE__)

# Hack our SSL certs into Thin TcpServer, only in development environment
require 'thin'
module Thin
  module Backends
    TcpServer.class_eval do
      def initialize_with_SSL(host, port)
        if Rails.env.development?
          Rails.logger.info "Loading SSL certs from ./ssl_dev..."
          @ssl = true
          @ssl_options = {
            :private_key_file => File.expand_path("../../ssl_dev/server.key", __FILE__),
            :cert_chain_file  => File.expand_path("../../ssl_dev/server.crt", __FILE__),
            :verify_peer => nil
          }
        end

        initialize_without_SSL(host, port)
      end

      alias_method :initialize_without_SSL, :initialize
      alias_method :initialize, :initialize_with_SSL      
    end
  end
end

# Must load 'rails/commands' after Thin SSL hack
require 'rails/commands'
...