如何使用内部签名的SSL证书部署Rails应用程序(SSL_CERT_FILE和openssl相关)

 qqqq 发布于 2023-02-06 12:25

关于使用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的Windows客户端net/http不信任Ubuntu服务器上的证书.我假设这是因为SSL_CERT_FILE没有设置环境变量(尽管内部根证书安装在Ubuntu服务器上并通过组策略部署到Windows客户端..?)

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

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) }

    我应该将内部CA根证书(和中间证书,以及CURL证书捆绑的其余部分)与应用程序捆绑在一起,然后ENV['SSL_CERT_FILE']在代码中设置吗?)

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

    别的什么?

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

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

在Rails初始化程序中.

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

谢谢

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
    

    来源

    http://gistflow.com/posts/227-net-http-cheat-sheet

    http://jjinux.blogspot.nl/2012/02/ruby-working-around-ssl-errors-on-os-x.html

    这似乎对我有用,但我对其他建议持开放态度.

    2023-02-06 12:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有