【问题标题】:How to deploy a Rails application with an internally signed SSL certificate (SSL_CERT_FILE and openssl related)如何使用内部签名的 SSL 证书部署 Rails 应用程序(SSL_CERT_FILE 和 openssl 相关)
【发布时间】:2014-01-06 09:57:40
【问题描述】:

我有几个关于使用 SSL 证书部署 Rails 应用程序的问题。

背景:

  • Rails 3.2.16 / Ruby 1.9.3
  • 由内部 Windows CA 服务器签名的 SAN SSL 证书
  • 使用 Apache/Passenger 将应用部署到 Ubuntu 12.04 服务器

根据https://gist.github.com/fnichol/867550,使用 Ruby net/http 的 Windows 客户端不信任 Ubuntu 服务器上的证书。我认为这是因为未设置 SSL_CERT_FILE 环境变量(尽管内部根证书已安装在 Ubuntu 服务器上并通过组策略部署到 Windows 客户端..?)

我希望能够从我的应用程序的任何客户端(Windows 或 Ubuntu)运行以下代码 sn-p

require 'net/http'
uri = URI.parse('https://ubuntu-server.internal.com/')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.start { |agent| agent.get(uri.path) }
  1. 我是否应该将内部 CA 根证书(和中间证书,以及 CURL 证书包的其余部分)与应用程序捆绑在一起,然后在代码中设置 ENV['SSL_CERT_FILE']?)

  2. 我是否应该在应用程序中仅包含内部 CA 根证书并在使用前使用初始化程序来设置 net/http?这似乎是 RubyInstaller https://github.com/oneclick/rubyinstaller/blob/master/rake/contrib/uri_ext.rb#L287-295 的方法,但我真的不知道如何编写这个代码?

  3. 还有别的吗?

到目前为止,选项 2 对我来说似乎是最好的,但正如我所说,我不知道如何进行设置

http.use_ssl = true
http.ca_file = "#{Rails.root}/config/internal-ca.crt"

在 Rails 初始化程序中。

任何帮助/建议将不胜感激。

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 openssl ssl-certificate


    【解决方案1】:

    所以,通过进一步的谷歌搜索,我想出了以下解决方案:

    # /config/initializers/ssl.rb
    
    require 'open-uri'
    require 'net/https'
    
    module Net
      class HTTP
        alias_method :original_use_ssl=, :use_ssl=
    
        def use_ssl=(flag)
          store = OpenSSL::X509::Store.new
          store.set_default_paths
    
          store.add_cert(OpenSSL::X509::Certificate.new(File.read("#{Rails.root}/config/ssl/root.crt")))
          store.add_cert(OpenSSL::X509::Certificate.new(File.read("#{Rails.root}/config/ssl/intermediate.crt")))
    
          self.cert_store = store
    
          self.verify_mode = OpenSSL::SSL::VERIFY_PEER
          self.original_use_ssl = flag
        end
      end
    end
    

    来源

    这似乎对我有用,但我愿意接受其他建议。

    【讨论】:

      猜你喜欢
      • 2019-06-14
      • 1970-01-01
      • 2016-12-04
      相关资源
      最近更新 更多