views:

229

answers:

1

My goal is to deploy a simple rails application on a windows server using the glassfish gem.

I have no trouble getting the glassfish gem to work with regular http, however I now need to add SSL security and I cannot find any links on how to enable https in the glassfish gem.

Has anyone succeeded in setting up the glassfish gem to support SSL?

Are there any other ways to serve a rails application over SSL on windows without any additional software installation (e.g. IIS, Glassfish, jBoss)?

A: 

EDIT (for the people who downvote)
Some questions have a deeper underlying issue that can be solved. In this case is the need of a jruby enabled web server with ssl. If your opinion differs with mine make your own post, please please don't downvote an answer that really solved someone's problem. Or even worse - downvote with no comment. Thank you.
END EDIT

I use jetty-rails gem and I coded SSL suport in it.
If u choose to use jetty-rails as well you can follow theese instructions to add SSL.
Make sure you use jetty-rails version 0.6 as current 0.8.1 is buggy.
I'm sure that glassfish too can be made to use SSL in a similar way.
I chosed jetty as it seems faster (startup) smaller and easyer to change the src.

jetty_rails-0.6/lib/jetty_rails/server.rb +32

  if config[:ssl] and config[:ssl] == true
    if config[:keystore] =~ /^\\/ # starts with slash => absolute dir
      keystore = config[:keystore]
    else # assume keystore is in cofig dir
      keystore = @config[:base] + '/config/' + config[:keystore]
    end
    if not config[:truststore].nil? # have separate truststore
      if config[:truststore] =~ /^\\/ # starts with slash => absolute dir
        truststore = config[:truststore]
      else # assume keystore is in cofig dir
        truststore = @config[:base] + '/config/' + config[:truststore]
      end
    else # trustore == keystore
      truststore = keystore
    end

    security_connector = Jetty::Security::SslSocketConnector.new
    security_connector.set_acceptors(config[:acceptor_size])
    security_connector.port = config[:port]
    security_connector.confidential_port = config[:port]
    security_connector.keystore = keystore
    security_connector.password = config[:password]
    security_connector.key_password = config[:key_password].nil? ? config[:password] : config[:key_password]
    security_connector.truststore = truststore
    security_connector.trust_password = config[:trust_pasword].nil? ? config[:password] : config[:trust_pasword]
    @server.add_connector(security_connector)
  else
    connector = Jetty::SelectChannelConnector.new
    connector.set_acceptors(config[:acceptor_size])
    connector.port = config[:port]
    connector.confidential_port = config[:security_port] if config[:security_port]
    @server.add_connector(connector)
  end

how to generate a certificate store (keystore.jks)

See here: http://docs.codehaus.org/display/JETTY/How+to+configure+SSL

RAILS_ROOT/config/jetty_rails.yml

# Config
:port: 3000
:jruby_min_runtimes: <%= config[:environment] == 'production' ? 3 : 1 %>
:jruby_max_runtimes: <%= config[:environment] == 'production' ? 6 : 2 %>
:thread_pool_max: 40
:thread_pool_min: 4
:acceptor_size: 10

# Security
:ssl: true
:keystore: keystore.jks
:password: your_pass
# :key_password: your_pass # if different
# :truststore: truststore.jks # if different
# :trust_pasword: your_pass # if different

start the server

jruby -S jetty_rails -c config/jetty_rails.yml
clyfe
Thanks for your suggestion. In addition to what you mentioned above I had to add the following lines to lib/jars.rb module Security include_package "org.mortbay.jetty.security" endFor the project in question I have switched to using Jetty + WAR distribution, i.e. I am not using Jetty rails but rather the standard Jetty version and package my application using warbler.
Wolfgang