module Unicorn::SSLServer

this module is meant to be included in Unicorn::HttpServer It is an implementation detail and NOT meant for users.

Attributes

ssl_engine[RW]

Public Instance Methods

ssl_enable!() click to toggle source
# File lib/unicorn/ssl_server.rb, line 7
def ssl_enable!
  sni_hostnames = rack_sni_hostnames(@app)
  seen = {} # we map a single SSLContext to multiple listeners
  listener_ctx = {}
  @listener_opts.each do |address, address_opts|
    ssl_opts = address_opts[:ssl_opts] or next
    listener_ctx[address] = seen[ssl_opts.object_id] ||= begin
      unless sni_hostnames.empty?
        ssl_opts = ssl_opts.dup
        ssl_opts[:sni_hostnames] = sni_hostnames
      end
      ctx = Flipper.ssl_context(ssl_opts)
      # FIXME: make configurable
      ctx.session_cache_mode = OpenSSL::SSL::SSLContext::SESSION_CACHE_OFF
      ctx
    end
  end
  Unicorn::HttpServer::LISTENERS.each do |listener|
    ctx = listener_ctx[sock_name(listener)] or next
    listener.extend(Kgio::SSLServer)
    listener.ssl_ctx = ctx
    listener.kgio_ssl_class = Unicorn::SSLClient
  end
end