class SyslogTls::SSLTransport
Supports SSL connection to remote host
Attributes
ca_cert[R]
cert[R]
host[R]
key[R]
port[R]
retries[W]
socket[RW]
ssl_version[R]
Public Class Methods
new(host, port, ca_cert: 'system', cert: nil, key: nil, ssl_version: :TLSv1_2, max_retries: 1)
click to toggle source
# File lib/syslog_tls/ssl_transport.rb, line 27 def initialize(host, port, ca_cert: 'system', cert: nil, key: nil, ssl_version: :TLSv1_2, max_retries: 1) @ca_cert = ca_cert @host = host @port = port @cert = cert @key = key @ssl_version = ssl_version @retries = max_retries connect end
Public Instance Methods
connect()
click to toggle source
# File lib/syslog_tls/ssl_transport.rb, line 38 def connect @socket = get_ssl_connection @socket.connect end
get_ssl_connection()
click to toggle source
# File lib/syslog_tls/ssl_transport.rb, line 43 def get_ssl_connection tcp = TCPSocket.new(host, port) ctx = OpenSSL::SSL::SSLContext.new ctx.set_params(verify_mode: OpenSSL::SSL::VERIFY_PEER) ctx.ssl_version = ssl_version case ca_cert when true, 'true', 'system' # use system certs, same as openssl cli ctx.cert_store = OpenSSL::X509::Store.new ctx.cert_store.set_default_paths when false, 'false' ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE when %r{/$} # ends in / ctx.ca_path = ca_cert when String ctx.ca_file = ca_cert end ctx.cert = OpenSSL::X509::Certificate.new(File.read(cert)) if cert ctx.key = OpenSSL::PKey::read(File.read(key)) if key socket = OpenSSL::SSL::SSLSocket.new(tcp, ctx) socket.sync_close = true socket end
method_missing(method_sym, *arguments, &block)
click to toggle source
Forward any methods directly to SSLSocket
# File lib/syslog_tls/ssl_transport.rb, line 86 def method_missing(method_sym, *arguments, &block) @socket.send(method_sym, *arguments, &block) end
write(s)
click to toggle source
Allow to retry on failed writes
# File lib/syslog_tls/ssl_transport.rb, line 71 def write(s) begin retry_id ||= 0 @socket.send(:write, s) rescue => e if (retry_id += 1) < @retries connect retry else raise e end end end