Class: Excon::SSLSocket

Inherits:
Socket
  • Object
show all
Defined in:
lib/excon/ssl_socket.rb

Instance Attribute Summary

Attributes inherited from Socket

#params

Instance Method Summary collapse

Methods inherited from Socket

#read, #write

Constructor Details

#initialize(params = {}, proxy = nil) ⇒ SSLSocket

Returns a new instance of SSLSocket.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/excon/ssl_socket.rb', line 30

def initialize(params = {}, proxy = nil)
  super

  # create ssl context
  ssl_context = OpenSSL::SSL::SSLContext.new

  if params[:ssl_verify_peer]
    # turn verification on
    ssl_context.verify_mode = OpenSSL::SSL::VERIFY_PEER

    if params[:ssl_ca_path]
      ssl_context.ca_path = params[:ssl_ca_path]
    elsif params[:ssl_ca_file]
      ssl_context.ca_file = params[:ssl_ca_file]
    else
      # use default cert store
      store = OpenSSL::X509::Store.new
      store.set_default_paths
      ssl_context.cert_store = store
    end
  else
    # turn verification off
    ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end

  if @params.has_key?(:client_cert) && @params.has_key?(:client_key)
    ssl_context.cert = OpenSSL::X509::Certificate.new(File.read(@params[:client_cert]))
    ssl_context.key = OpenSSL::PKey::RSA.new(File.read(@params[:client_key]))
  end

  @socket = OpenSSL::SSL::SSLSocket.new(@socket, ssl_context)
  @socket.sync_close = true

  if @proxy
    @socket << "CONNECT " << @params[:host] << ":" << @params[:port] << Excon::HTTP_1_1
    @socket << "Host: " << @params[:host] << ":" << @params[:port] << Excon::CR_NL << Excon::CR_NL

    # eat the proxy's connection response
    while line = @socket.readline.strip
      break if line.empty?
    end
  end

  # connect the new OpenSSL::SSL::SSLSocket
  @socket.connect

  # verify connection
  if params[:ssl_verify_peer]
    @socket.post_connection_check(@params[:host])
  end

  @socket
end

Instance Method Details

#connectObject



8
9
10
# File 'lib/excon/ssl_socket.rb', line 8

def connect
  @socket = TCPSocket.new(@params[:host], @params[:port])
end