2012-01-11 8 views
10

Attualmente sto usando le seguenti opzioni nel mio Rails app per abilitare HTTPS con WEBrick:Come configuro WEBrick per utilizzare un certificato intermedio con HTTPS?

{ 
    :Port => 3000, 
    :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("certificates/https/key.pem").read), 
    :SSLCertificate => OpenSSL::X509::Certificate.new(
     File.open("certificates/https/cert.pem").read), 
    :SSLCertName => [["CN", WEBrick::Utils::getservername]] 
} 

Come potrei fare per specificare un certificato intermedio?

+0

Non si dovrebbe rispondere alla propria domanda sulla domanda stessa. Dovresti piuttosto rispondere alla tua domanda con una risposta. –

+0

Sembra che il codice sopra venga da [questo post del blog] (https://www.altamiracorp.com/blog/employee-posts/configuring-webrick-to-use-ssl), corretto? –

+0

Penso di averlo estratto dalla documentazione di WEBrick, che era una vera sfida. È un bel piatto di caldaia. Non posso commentare per @priteshj però. –

risposta

12

Sono riuscito a trovare una risposta dopo un'ora in più di googling per le parole chiave. Ecco la possibilità di definire un certificato intermedio:

:SSLExtraChainCert => [ 
    OpenSSL::X509::Certificate.new(
     File.open("certificates/intermediate.crt").read)] 

Si noti che l'opzione richiede un oggetto Array, che permette di includere più certificati, se necessario.

-1

Se si utilizza rotaie 3, quindi modificare lo script/file binari come

#!/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. 
require 'rubygems' # if ruby 1.8.7 
require 'rails/commands/server' 
require 'rack' 
require 'webrick' 
require 'webrick/https' 

module Rails 
    class Server < ::Rack::Server 
     def default_options 
      super.merge({ 
       :Port => 3000, 
       :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("/key/vhost1.key").read), 
       :SSLCertificate => OpenSSL::X509::Certificate.new(
         File.open("/crt/vhost1.crt").read), 
       :SSLCertName => [["CN", WEBrick::Utils::getservername]], 
      }) 
     end 
    end 
end 

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

Il codice di cui sopra è stato modificato dall'esempio in Configuring WEBrick to use SSL in Rails 3. Questo ha funzionato per me.

+0

La modifica da .pem a .crt non cambierà le informazioni sul certificato effettive presenti nel file. Devo rendere WEBrick consapevole di una terza informazione, il certificato intermedio. –

+0

puoi condividere il file script/rails che hai modificato? anche quale versione è il ruby ​​e rails – PriteshJ

+0

La mia domanda è come definire un certificato intermedio, non chiedendo una configurazione funzionante senza uno. –