Как мога да предам SSL опции в rails сървър в Rails 3.0?

Има ли начин да прехвърлите 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 ] ]

но не знам как да направя това в новата рамка.

Благодаря за всяка помощ!


person estoner    schedule 30.08.2010    source източник


Отговори (2)


Разгледайте Thin сървъра вместо 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, но това трябва да отговори на вашите изисквания за разработка.

person phlipper    schedule 22.10.2011

Ето решението, което измислих. Модифицирах 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'
person ndbroadbent    schedule 26.07.2012