代码之家  ›  专栏  ›  技术社区  ›  Wolfgang

使用glassfish gem(或其他Web服务器)和ssl

  •  1
  • Wolfgang  · 技术社区  · 14 年前

    我的目标是使用glassfish在Windows服务器上部署一个简单的Rails应用程序 宝石 .

    我很容易让glassfish gem与常规HTTP一起工作,但是我现在需要添加SSL安全性,并且我找不到任何关于如何启用 HTTPS 在玻璃鱼宝石里。

    有人成功地建立了GlassFish gem来支持SSL吗?

    在没有任何附加软件安装(如IIS、Glassfish、JBoss)的情况下,有没有其他方法可以在Windows上通过SSL为Rails应用程序提供服务?

    1 回复  |  直到 14 年前
        1
  •  0
  •   clyfe    14 年前

    编辑 (对于投反对票的人)
    有些问题的深层次问题是可以解决的。在这种情况下,需要一个支持JRuby的带有SSL的Web服务器。如果你的意见与我的不同,请写你自己的帖子。 拜托 不要轻视那个答案 真的解决了某人的问题 . 或者更糟的是,投反对票,没有评论。谢谢您。
    结束编辑

    我使用jetty rails gem并在其中编码ssl suport。
    如果您也选择使用Jetty Rails,则可以按照以下说明添加SSL。
    确保使用0.6版的Jetty Rails,因为当前0.8.1有问题。
    我相信Glassfish也可以以类似的方式使用SSL。
    我选择了码头,因为它看起来更快(启动)更小,更容易改变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
    

    如何生成证书存储(keystore.jks)

    请参见此处: http://docs.codehaus.org/display/JETTY/How+to+configure+SSL

    Rails_根/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
    

    启动服务器

    jruby -S jetty_rails -c config/jetty_rails.yml